【问题标题】:Cakephp HABTM same modelCakephp HABTM 同款
【发布时间】:2014-11-06 18:28:32
【问题描述】:

我正试图弄清楚如何追踪不动产的所有者。特别是投资者。 (我确实花了几个小时研究和尝试不同的东西)

我在同一型号上使用 HABTM。 (原因见下文)
我遇到的困难在于模型->查找。如果我正在搜索的id 在关系表的第一列中,它只会返回相关条目。

在我的实体表中

1,Homer
2,Springfield Nuclear
3,Bart

在entities_relateds中

2,1
2,3

(为了争论,我们假设 Bart 长大并去工厂工作。
所以 1 和 3 都与 2 有关。)

如果有的话

$this->Entity->findById(2);

看起来很棒。

Array
(
    [0] => Array
        (
            [Related] => Array
                (
                    [id] => 2
                    [name] => Springfield Nuclear
                    [0] => Array
                        (
                            [id] => 1
                            [name] => Bart
                        )

                    [1] => Array
                        (
                            [id] => 3
                            [name] => Homer
                        )
                )
        )
)

但是,如果entities_relateds的第一行的值颠倒了……

1,2
2,3

我明白了

Array
(
[0] => Array
    (
        [Related] => Array
            (
                [id] => 2
                [name] => Springfield Nuclear
                [0] => Array
                    (
                        [id] => 3
                        [name] => Homer
                    )
            )
    )

)

它不返回第一行。 没关系

$this->Entity->Related->findById(2);

它稍微改变了数组,但仍然不返回第一行。

我愿意接受有关如何解决此问题的其他建议。

谢谢。

下面有更多信息。

场景: 让人们合作进行交易并以他们自己的名义或几家不同公司中的任何一家拥有房产是很常见的。合作伙伴 A、合作伙伴 B、公司 A、公司 B。这些名称中的任何一个都可以在标题上,实际上这些只是同一个“组”的别名。

所以,我创建了一个名为“实体”的表。每条记录可以是真实的人,也可以是公司。它们有很多相同的属性,但最重要的是,任何一种类型都可以是不动产的合法所有者。

CREATE TABLE `entities` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50) NULL DEFAULT NULL,
   PRIMARY KEY (`id`)
)

关系表:

CREATE TABLE `entities_relateds` (
  `entity_id` INT(11) NOT NULL DEFAULT '0',
  `related_id` INT(11) NOT NULL DEFAULT '0',
   PRIMARY KEY (`entity_id`, `related_id`)
)

模型 HATBM

App::uses('AppModel', 'Model');

class Entity extends AppModel {

    public $hasAndBelongsToMany = array(
        'Related' => array(
            'className' => 'Entity',
            'joinTable' => 'entities_relateds',
            'foreignKey' => 'entity_id',
            'associationForeignKey' => 'related_id',
            'unique' => 'keepExisting'
         )
    );

}

【问题讨论】:

    标签: cakephp-2.0 has-and-belongs-to-many


    【解决方案1】:

    我建议您尝试将模型的递归设置为 1,例如:

    $this->Entity->recursive = 1
    

    然后尝试进行查找。

    如果这不起作用,我会试一试containable behavior,这比搞乱模型的递归性还要好。
    如果您选择使用 ContainableBehavior,您的发现最终会是这样的:

    $this->Entity->find('all', 
              array(
                    'conditions'=>array('id'=>2), 
                    'contain'=>array('Related')
              )
    );
    

    更新 1:添加了可包含的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多