дублировать запись для ключа 'idx_client_id_parent_id_alias_language' при ручной вставке базы данных joomla

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 возвращает результат, но мне кажется, что ни одна из них не связана с моей проблемой.

Solutions Collecting From Web of "дублировать запись для ключа 'idx_client_id_parent_id_alias_language' при ручной вставке базы данных joomla"

Думал, что я напишу ответ, поскольку Шенквен прокомментировал, что он искал Google для ответа и не нашел ничего полезного.

Ошибка, которую видит OP, вызванная им вручную, вставляя строку, но в таблице меню есть несколько столбцов. Ключ представляет собой комбинацию client_id , parent_id , псевдонима и языка .

У вас не может быть двух строк, которые имеют одинаковые значения. Как отмечалось в комментариях ОП, он дублировал псевдоним.