2016-05-12 178 views
1

的Joomla 3重複條目鍵「idx_client_id_parent_id_alias_language」當手動插入的Joomla數據庫

我試圖手動插入一些記錄到#__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 = INSERT INTO #__menumenutypetitlealiasnotepathlinktypepublishedparent_idlevelcomponent_idchecked_outchecked_out_timebrowserNavaccessimgtemplate_style_idparamshomelanguageclient_id) VALUES( '隱藏', '測試', '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 \「:\ 」\「,\」 菜單meta_description \ 「:\」 \」,\ 「菜單meta_keywords \」:\ 「\」,\ 「機器人\」:\ 「\」,\ 「安全\」:0}」, '0', '*', 「0」)

我不明白爲什麼有一個名爲「idx_client_id_parent_id_alias_language」鍵,可以肯定的是不是表的領域之一。谷歌搜索它返回一些結果,但在我看來,他們沒有一個與我的問題有關。

+0

你可以給我們'SHOW CREATE TABLE __menu'的輸出嗎? –

+1

http://p.nycweb.io/1.png @NeilMasters – shenkwen

+1

確定嘗試「菜單」表,它比我的更重要,因爲它突出顯示了鍵:)您正手動插入一行並接收到一個關鍵錯誤。密鑰是別名,client_id,parent_id和語言之間的組合,因此不能有具有相同組合的兩行。 –

回答

1

認爲我會寫一個答案,因爲shenkwen評論說他搜索了一個答案,並沒有發現任何有用的信息。

由於他手動插入行而導致OP看到的錯誤,但菜單表上有多列鍵。關鍵是client_id,parent_id,別名語言的組合。

您不能有兩行共享這些相同的值。正如OP的意見所述,他重複了別名。

+0

我的代碼現在正在工作。謝謝你教我關於組合鍵,這對我來說是新的。 現在我有一個小問題,那些'lft'和'rgt'字段是關於什麼的?我發現對於其他記錄它們正在遞增,但對於我新插入的記錄,它們都是0.這會在未來造成什麼問題嗎? – shenkwen

+0

據我記得(自從我使用joomla以來它已經有一段時間了),它們用來表示它們嵌套的深度,因此您可以創建子菜單。 https://docs.joomla.org/Tables/menu –