2014-10-10 95 views
0

我在CakePHP中遇到了一個問題。我希望與bs_categoriesbs_listing_types表有hasAndBelongsToMany關係。 (一個類別可以有多個列表類型)。CakePHP中hasAndBelongsToMany關係不保存數據

這些是我用過的表格結構。

bs_categories 
------------- 
id    int(10) 
parent_id  int(10) 
lft   int(10) 
rght   int(10) 
title   varchar(255) 
body   text 
meta_title  varchar(255) 
meta_keyword text 
meta_desc  text 
slug   varchar(255) 
status   int(1) 
created  datetime 
modified  datetime 

bs_listing_types 
----------------- 
id   int(11) 
title  varchar(255) 
status  int(1) 
created  datetime 
modified datetime 

bs_listing_types_categories 
--------------------------- 
id    int(11) 
listing_type_id int(11) 
category_id  int(11) 

我已經寫在下面的型號代碼:

/** 
* hasAndBelongsToMany associations 
* 
* @var array 
*/ 
public $hasAndBelongsToMany = array(
    'ListingType' => array(
     'className'    => 'ListingType', 
     'joinTable'    => 'listing_types_categories', 
     'foreignKey'   => 'listing_type_id', 
     'associationForeignKey' => 'category_id', 
     'unique'    => 'keepExisting', 
     'conditions'   => '', 
     'fields'    => '', 
     'order'     => '', 
     'limit'     => '', 
     'offset'    => '', 
     'finderQuery'   => '', 
    ) 
); 

在節省時間,我得到以下數據。

Array(
[Category] => Array 
    (
     [listing_type_id] => Array 
      (
       [0] => 2 
       [1] => 3 
      ) 

     [parent_id] => 
     [id] => 1 
     [title] => Advert 
     [meta_title] => Advert 
     [meta_keyword] => Advert 
     [meta_desc] => Advert 
     [status] => 1 
    )) 

但問題是它沒有將數據保存到bs_listing_types_categories表中。我做錯了什麼?請幫忙!

+1

告訴我們您的保存代碼 – justrohu 2014-10-10 07:20:18

+0

您曾用什麼保存數據? 「保存」或「保存所有」功能。如果您尚未使用「saveAll」,請嘗試一次。 – 2014-10-15 06:15:36

回答

0

HABTM從來沒有根據cakePHP約定具有ID列,否則數據不會保存。

bs_listing_types_categories 

將有以下字段唯一

listing_type_id int(11) 
category_id  int(11) 

欲瞭解更多信息LINK

對於 如果帖子都涉及到在HABTM標籤,然後,檢查出posts_to_tags沒有id字段。

CREATE TABLE `posts` (
    `id` int(11) NOT NULL auto_increment, 
    `name` varchar(255) NOT NULL, 
    `body` text NOT NULL, 
    PRIMARY KEY (`id`) 
); 
CREATE TABLE `tags` (
    `id` int(11) NOT NULL auto_increment, 
    `name` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`) 
); 
CREATE TABLE `posts_tags` (
    `post_id` int(11) NOT NULL, 
    `tag_id` int(11) NOT NULL, 
    PRIMARY KEY (`post_id`,`tag_id`) 
); 

你的表結構,

+0

這篇文章完全過時了,它是從2008年開始的CakePHP 1.x,而數據庫模式完全違反了[**推薦**](http://book.cakephp.org/2.0/en/models/associations- linking-models-together.html#hasandbelongstomany-habtm),它表示沒有組合主鍵(cake <3.x無法處理它們)。至少在保存附加數據或使用'with'選項時,主鍵必須至少存在,並且在任何情況下它的存在都不會保存數據。 – ndm 2014-10-10 08:39:08

0

你的陣列應該是這樣的,這樣你們應該作出這樣的陣列將節省使用foreach循環之前。

Array(
[Category] => Array 
    (
     [listing_type_id] => Array 
      (
       [0] => 2 
) 
[listing_type_id] => Array 
      (
       [1] => 3 
      ) 

     [parent_id] => 
     [id] => 1 
     [title] => Advert 
     [meta_title] => Advert 
     [meta_keyword] => Advert 
     [meta_desc] => Advert 
     [status] => 1 
    )) 

雖然保存你應該使用saveAssociated。

相關問題