Подскажите есть такой код:
При попытки его выполнить сообщение:
Как можно исправить код может подход чтобы он работал.
PHP:
public function actionCopy(ParameterBag $params)
{
$prefix = $this->assertPrefixExists($params->prefix_id);
$newPrefix = $this->em()->create('XFRM:ResourcePrefix');
$newPrefixId = $newPrefix->prefix_id;
// Копирование данных с существующего префикса в новый префикс
$newPrefix->bulkSet([
'prefix_group_id' => $prefix->prefix_group_id,
'display_order' => $prefix->display_order,
'css_class' => $prefix->css_class,
'allowed_user_group_ids' => $prefix->allowed_user_group_ids,
'title' => $this->copyPhrase('resource_prefix.' . $prefix->prefix_id, $newPrefix),
'description' => $this->copyPhrase('resource_prefix_desc.' . $prefix->prefix_id, $newPrefix),
'usage_help' => $this->copyPhrase('resource_prefix_help.' . $prefix->prefix_id, $newPrefix),
]);
if ($newPrefix->save()) {
// Копирование применимых категорий
$categoryPrefixes = $this->finder('XFRM:CategoryPrefix')
->where('prefix_id', $prefix->prefix_id)
->fetch();
foreach ($categoryPrefixes as $categoryPrefix) {
$newCategoryPrefix = $this->em()->create('XFRM:CategoryPrefix');
$newCategoryPrefix->bulkSet([
'resource_category_id' => $categoryPrefix->resource_category_id,
'prefix_id' => $newPrefix->prefix_id,
]);
$newCategoryPrefix->save();
}
return $this->redirect($this->buildLink('resource-manager/prefixes') . $this->buildLinkHash($newPrefix->prefix_id));
} else {
return $this->error('Произошла ошибка при копировании префикса.');
}
}
protected function copyPhrase($title)
{
$oldPhrase = $this->finder('XF:Phrase')
->where('title', $title)
->fetchOne();
if ($oldPhrase) {
$languageId = $oldPhrase->language_id;
// Формируем новый заголовок в соответствии с требованием
$newTitle = $title;
// $newTitle = $title . '_';
$newPhraseText = $oldPhrase->phrase_text . ' (копия)';
$newPhrase = \XF::em()->create('XF:Phrase');
$newPhrase->language_id = $languageId;
$newPhrase->title = $newTitle;
$newPhrase->phrase_text = $newPhraseText;
if ($newPhrase->save()) {
return $newPhrase;
}
}
return null;
}
т.е в таблицу xf_phrase копируются данные которые там уже есть а именно resource_prefix.17, resource_prefix_desc.17, resource_prefix_help.17 что соответствует название описание и справка остальные поля без проблем можно скопировать а ээти не получается туда не подтягивается id нового префикса за это отвечают эти проблемные поляНазвание фразы должно быть уникальным в пределах языка. Это название уже используется.
PHP:
'title' => $this->copyPhrase('resource_prefix.' . $prefix->prefix_id, $newPrefix),
'description' => $this->copyPhrase('resource_prefix_desc.' . $prefix->prefix_id, $newPrefix),
'usage_help' => $this->copyPhrase('resource_prefix_help.' . $prefix->prefix_id, $newPrefix),