键';的重复条目;idx_client_id_pparent_id_alias_language';手动插入


duplicate entry for key 'idx_client_id_parent_id_alias_language' when manually inserting joomla database

Joomla 3

我正在尝试手动将一些记录插入#__menu。由于对于大多数字段,我只能使用其他记录的值,所以我正试图从现有记录中获取stdObject并将其插入回表中。在此之前,我需要处理可能的密钥副本。我阅读了表结构,除了id之外,我发现字段lftrgt似乎必须是唯一的。所以下面是我尝试的:

$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_pparent_id_alias_language'

SQL=插入#__menumenutypetitlealiasnotepathlinktypepublishedparent_idlevelcomponent_idchecked_outchecked_out_timebrowserNavaccessimgtemplate_style_idparamshomelanguageclient_id)VALUES('hidden','test','001','','01','index.php?option=com_k2&view=item&layout=item&aamp;id=1','组件','1','1'','10125','0','0000-00-0000:00:00','0','1','','0','{''"menu-anchor_title''":''"''",''"menu_achor_pass''":"''"、''"menu_image''":''"、''"menu_text''":1、''"菜单_显示''"::1、"page_title''":''"、"show_page_heading":''"、''"page_heading":''"、"pageclass_sfx''":"''"、'' _keywords''":''"''",''"robots''":''"''",''"secure''":0}','0','*','0')

我不明白为什么有一个名为"idx_client_id_pparent_id_alias_language"的键,它肯定不是表的字段之一。在谷歌上搜索会返回一些结果,但在我看来,这些结果都与我的问题无关。

我想我会写一个答案,因为沈评论说他在谷歌上搜索了一个答案但没有发现任何帮助。

OP看到的错误是由他手动插入一行,但菜单表上有多列键引起的。密钥是client_idparent_id别名语言的组合。

不能有两行共享相同的值。正如OP的评论中所指出的,他是在重复这个别名。