2010-05-28 150 views
0

我在CakePhp上的模型上找到find()時遇到了一些麻煩。CakePhp:模型遞歸關聯和查找

我有三個模型,以這種方式relationed:

項目(some_fields,ITEM_ID) ------屬於關聯----->項目(some_fields,ITEM_ID) ------ belongsTo -----> User(some_fields campi,暱稱)

我需要做一個find()並檢索項目中的所有字段,Item中的字段和User中的暱稱字段。這是我的代碼:

$this->set('projects', $this->Project->find('all', array('recursive' => 2))); 

但我的輸出不包含用戶對象。 我試着用可容忍的行爲,但輸出是相同的。什麼壞了?

非常非常感謝

彼得

+3

除非你在這裏有一個拼寫錯誤,你似乎沒有'items'表中的'user_id'字段。 – Mike 2010-05-28 13:47:46

+0

您可以發佈您的可容納數組(代碼)還是您已應用於模型字段的可容納提取中的條件? – 2010-05-28 16:12:50

回答

1

你的方法產生太多的疑問。您可能希望通過綁定和解除綁定模型來減少數量。看詳情here

1

正確設置你的模型或嘗試加入

$this->Project->recursive = -1; 
$this->Project->find('all', array(
    'joins'=>array(
     array(
     'table'=>'item', 
     'alias'=>'Item', 
     'type'=>'INNER', 
     'conditions'=>array(
      'Item.id=Project.item_id' 
      ) 
     ), 
     array(
     'table'=>'user', 
     'alias'=>'User', 
     'type'=>'INNER', 
     'conditions'=>array(
      'User.id=Item.user_id' 
     ) 
    ) 
    ), 
    'fields'=>array(
    //necessary 
    ), 
    'conditions'=>array(
    //if any 
    ); 
1

Project.php型號文件應如下

<?php 
App::uses('AppModel','Model'); 
/* 
* 
* Project Model 
* 
*/ 
Class Project extends AppModel{ 

/* 
* 
* actsAs Behaviour 
* 
*/ 
    public $actsAs = array('Containable'); 

/* 
* 
* belongsTO association 
* 
*/ 
    public $belongsTo = array(
     'Item' => array(
      'className' => 'Item', 
      'foreignKey' => 'project_id', 
      ) 
     ); 
} 
?> 

Item.php型號文件應如下

<?php 
App::uses('AppModel','Model'); 
/* 
* 
* Item Model 
* 
*/ 
Class Item extends AppModel{ 

/* 
* 
* actsAs Behaviour 
* 
*/ 
    public $actsAs = array('Containable'); 

/* 
* 
* belongsTO association 
* 
*/ 
    public $belongsTo = array(
     'User' => array(
      'className' => 'User', 
      'foreignKey' => 'item_id', 
      ) 
     ); 
/* 
* 
* hasMany association 
* 
*/ 
    public $hasMany = array(
     'Project' => array(
      'className' => 'Project', 
      'foreignKey' => 'project_id', 
      ) 
     ); 
} 
?> 

User.php型號文件應該如下

<?php 
App::uses('AppModel','Model'); 
/* 
* 
* User Model 
* 
*/ 
Class User extends AppModel{ 

/* 
* 
* actsAs Behaviour 
* 
*/ 
    public $actsAs = array('Containable'); 


/* 
* 
* hasMany association 
* 
*/ 
    public $hasMany = array(
     'Item' => array(
      'className' => 'Item', 
      'foreignKey' => 'item_id', 
      ) 
     ); 
} 
?> 

您可以嘗試在控制器中使用下面的代碼。

<?php 
$contain = array('Item' => array('User')); 
$this->set('projects', $this->Project->find('all', array('contain' => $contain))); 
?>