2014-10-10 2 views
0

У меня возникла проблема с CakePHP. Я хочу hasAndBelongsToMany отношение к bs_categories и bs_listing_types таблиц. (Категория может иметь несколько типов листинга).hasAndBelongsToMany отношения в CakePHP не сохраняя данные

Это структура таблицы, которую я использовал.

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

+0

Что вы использовали для сохранения данных? «save» или «saveAll». Если вы еще не использовали «saveAll», попробуйте один раз. –

ответ

0

HABTM NEVER имеет столбец идентификаторов в соответствии с конвенцией cakePHP, данные не сохраняются.

bs_listing_types_categories 

будет иметь следующие поля только

listing_type_id int(11) 
category_id  int(11) 

Для получения дополнительной информации LINK

Для Пример Если сообщения связаны с тегами в HABTM, затем, проверить posts_to_tags без поля идентификатора.

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

Эта статья полностью устарела, она предназначена для CakePHP 1.x с 2008 года, а схема БД полностью противоречит [** рекомендациям **] (http://book.cakephp.org/2.0/en/models/associations- linking-models-together.html # hasandbelongstomany-habtm), в котором нет составных первичных ключей (торт <3.x не может их обработать). Кроме того, первичный ключ должен присутствовать, по крайней мере, при сохранении дополнительных данных или с помощью опции 'with', и в любом случае его присутствие не будет препятствовать сохранению данных. – ndm

0

ваш массив должен быть, как это так, и должны сделать массив как это прежде, чем применить сохранить с помощью цикла Еогеасп.

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.

Смежные вопросы