【问题标题】:hasAndBelongsToMany relationship in CakePHP not saving the dataCakePHP中的hasAndBelongsToMany关系不保存数据
【发布时间】:2014-10-16 17:19:14
【问题描述】:

我在 CakePHP 中遇到了问题。我想要 hasAndBelongsToMany 与 bs_categoriesbs_listing_types 表的关系。 (一个类别可以有多种列表类型)。

这些是我使用的表结构。

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 表中。我做错什么了吗。请帮忙!

【问题讨论】:

  • 向我们展示您的保存代码
  • 你用什么来保存数据的? “保存”或“保存所有”功能。如果您还没有使用“saveAll”,请尝试一次。

标签: php cakephp cakephp-2.0 cakephp-2.1 cakephp-2.3


【解决方案1】:

根据 cakePHP 约定,HABTM 从来没有 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`)
);

你的表结构

【讨论】:

  • 那篇文章已经完全过时了,它适用于 2008 年的 CakePHP 1.x,并且 DB 模式完全反对 the recommendiations,它说没有复合主键(cake with 选项时必须存在主键,并且在任何情况下,它的存在都永远不会阻止数据被保存。
【解决方案2】:

你的数组应该是这样的,所以你应该在使用 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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 2010-12-07
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多