【问题标题】:duplicate entry for key 'idx_client_id_parent_id_alias_language' when manually inserting joomla database手动插入 joomla 数据库时,键“idx_client_id_parent_id_alias_language”的重复条目
【发布时间】:2021-05-10 23:52:43
【问题描述】:

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_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 和语言之间的组合,因此不能有两行具有相同的组合。
  • 谢谢。现在我开始明白发生了什么
  • 我认为这完全是因为你不能在相同的parentlanguage 下拥有两个具有相同alias 的菜单项。但是,我更改了alias 并再次运行代码,我仍然收到相同的错误消息
  • 另外两条现有记录,是的,都是*

标签: php mysql joomla


【解决方案1】:

当 shenkwen 评论说他在谷歌上搜索答案并没有发现任何帮助时,我想我会写一个答案。

OP 看到的错误是由他手动插入一行但菜单表上有一个多列键引起的。键是 client_idparent_idaliaslanguage 的组合。

您不能有两行共享相同的值。正如 OP 的 cmets 所述,他正在复制别名。

【讨论】:

  • 我的代码现在可以工作了。感谢您教我组合键,这对我来说是新的。现在我有一个小问题,那些lftrgt 字段是关于什么的?我发现对于其他记录,它们正在递增,但是对于我新插入的记录,它们都是 0。这会不会在将来造成任何问题?
  • 据我记得(自从我使用 joomla 以来已经有一段时间了)它们用于指示它们的嵌套程度,以便您可以创建子菜单。 docs.joomla.org/Tables/menu
猜你喜欢
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-03
  • 1970-01-01
  • 2014-03-16
  • 1970-01-01
  • 2020-01-13
  • 1970-01-01
相关资源
最近更新 更多