Joomla 3
Я пытаюсь вручную вставить некоторые записи в #__menu
. Поскольку для большинства полей я могу просто использовать значение, которое имеют другие записи, я пытаюсь получить stdObject из существующей записи и вставить ее обратно в таблицу. До этого мне нужно позаботиться о возможном ключевом дубликате. Я прочитал структуру таблицы, и, кроме id
, я обнаружил, что поля rgt
и rgt
кажутся уникальными. Итак, я стараюсь:
$db = JFactory::getDbo(); $query = $db->getQuery(true); $sql = 'SELECT * FROM `#__menu` WHERE id = 203'; $db->setQuery($sql); $example = $db->loadObjectList()[0]; unset($example->id); unset($example->lft); unset($example->rgt); $db->insertObject('#__menu',$example);
с$db = JFactory::getDbo(); $query = $db->getQuery(true); $sql = 'SELECT * FROM `#__menu` WHERE id = 203'; $db->setQuery($sql); $example = $db->loadObjectList()[0]; unset($example->id); unset($example->lft); unset($example->rgt); $db->insertObject('#__menu',$example);
с$db = JFactory::getDbo(); $query = $db->getQuery(true); $sql = 'SELECT * FROM `#__menu` WHERE id = 203'; $db->setQuery($sql); $example = $db->loadObjectList()[0]; unset($example->id); unset($example->lft); unset($example->rgt); $db->insertObject('#__menu',$example);
с$db = JFactory::getDbo(); $query = $db->getQuery(true); $sql = 'SELECT * FROM `#__menu` WHERE id = 203'; $db->setQuery($sql); $example = $db->loadObjectList()[0]; unset($example->id); unset($example->lft); unset($example->rgt); $db->insertObject('#__menu',$example);
Сообщение об ошибке, которое я получаю, это
Дублируемая запись '0-1-001- *' для ключа 'idx_client_id_parent_id_alias_language'
SQL = INSERT INTO
#__menu
(menutype
,title
,alias
,note
,path
,link
,type
,published
,parent_id
,level
,component_id
,checked_out
,checked_out_time
,browserNav
,access
,img
,template_style_id
,params
,home
,language
,client_id
) VALUES ( 'скрытый', 'тест', '001', '', '001', 'index.php? Option = com_k2 & вид = элемент & макета = элемент & ID = 1', 'компонент', '1', '1', '1 ',' 10125 ',' 0 ',' 0000-00-00 00:00:00 ',' 0 ',' 1 ',' ',' 0 ',' {\ "menu-anchor_title \": \ " \», \ "меню anchor_css \": \ "\", \ "menu_image \": \ "\", \ "menu_text \": 1, \ "menu_show \": 1, \ "page_title \": \ "\", \ "show_page_heading \": \ "\", \ "page_heading \": \ "\", \ "pageclass_sfx \": \ "\", \ "меню meta_description \": \ "\", \ "меню-meta_keywords \": \ "\", \ "роботов \": \ "\", \ "безопасный \": 0}», '0', '*', '0')
Я не понимаю, почему есть ключ с именем 'idx_client_id_parent_id_alias_language', он, конечно же, не является одним из полей таблицы. Googling возвращает результат, но мне кажется, что ни одна из них не связана с моей проблемой.
Думал, что я напишу ответ, поскольку Шенквен прокомментировал, что он искал Google для ответа и не нашел ничего полезного.
Ошибка, которую видит OP, вызванная им вручную, вставляя строку, но в таблице меню есть несколько столбцов. Ключ представляет собой комбинацию client_id , parent_id , псевдонима и языка .
У вас не может быть двух строк, которые имеют одинаковые значения. Как отмечалось в комментариях ОП, он дублировал псевдоним.