2014-11-06 101 views
0

我想弄清楚如何跟蹤不動產的業主。投資者具體。 (我花了幾個小時研究並嘗試不同的東西)Cakephp HABTM相同型號

我在同一模型上使用HABTM。 (見下文爲什麼)
我遇到的困難是在模型 - >找到。如果我要搜索的id位於關係表的第一列,它只會返回相關條目。

在實體表我有

1,Homer 
2,Springfield Nuclear 
3,Bart 

在entities_relateds

2,1 
2,3 

(爲便於討論,讓我們姑且認爲巴特長大,去在工廠上班。
所以兩個& 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' 
     ) 
    ); 

} 

回答

0

我建議你嘗試模型的遞歸設置爲1,如:

$this->Entity->recursive = 1 

然後嘗試執行查找。

如果這不起作用,我會給containable behavior一個鏡頭,這比搞模型的遞歸更好。
如果選擇ContainableBehavior工作您發現最終會是這樣的:

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

更新1:增加中容納的代碼。