【发布时间】:2021-05-10 23:52:43
【问题描述】:
Joomla 3
我正在尝试手动将一些记录插入#__menu。由于对于大多数字段,我只能使用其他记录的值,因此我试图从现有记录中获取 stdObject 并将其插入回表中。在此之前,我需要处理可能的密钥重复。我阅读了表结构,除了id,我发现字段lft 和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);
我得到的错误信息是
键的重复条目“0-1-001-*” 'idx_client_id_parent_id_alias_language'
SQL=插入到
#__menu(menutype,title,alias,note,path,link,type,published,parent_id,@,checked_out,component_id,@98765 987654340@,browserNav,access,img,template_style_id,params,home,language,client_id) VALUES ('hidden','test','001','','001','index.php?option=com_k2&view=item&layout=item&id=1','component','1','1',' 1','10125','0','0000-00-00 00:00:00','0','1',' ','0','{\"menu-anchor_title\":\"\",\"menu-anchor_css\":\"\",\"menu_image\":\"\",\"menu_text\" :1,\"menu_show\":1,\"page_title\":\"\",\"show_page_heading\":\"\",\"page_heading\":\"\",\"pageclass_sfx\": \"\",\"menu-meta_description\":\"\",\"menu-meta_keywords\":\"\",\"robots\":\"\",\"secure\":0} ','0','*','0')
我不明白为什么有一个名为“idx_client_id_parent_id_alias_language”的键,它肯定不是表的字段之一。谷歌搜索它会返回一些结果,但在我看来,它们都与我的问题无关。
【问题讨论】:
-
p.nycweb.io/1.png@NeilMasters
-
好的,试试“菜单”表,它比我的更适合您,因为它突出显示了键:) 您手动插入一行并收到键错误。 Key 是 alias、client_id、parent_id 和语言之间的组合,因此不能有两行具有相同的组合。
-
谢谢。现在我开始明白发生了什么
-
我认为这完全是因为你不能在相同的
parent和language下拥有两个具有相同alias的菜单项。但是,我更改了alias并再次运行代码,我仍然收到相同的错误消息 -
另外两条现有记录,是的,都是
*