我对CakePhp上的模型上的find()有些麻烦。
我以这种方式关联了三个模型:
项目(some_fields,item_id) ------ -----属于关联>项目(some_fields,item_id) ------ -----属于关联>用户(some_fields campi,昵称)
我需要执行find()并检索项目中的所有字段,Item中的字段和User中的昵称字段。这是我的代码:
$this->set('projects', $this->Project->find('all', array('recursive' => 2)));
但我的输出不包含用户对象。 我尝试过Containable行为,但输出是一样的。什么坏了?
非常感谢
彼得
答案 0 :(得分:1)
您的方法会生成太多查询。您可能希望通过绑定和取消绑定模型来减少其数量。详情请见here。
答案 1 :(得分: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
);
答案 2 :(得分: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)));
?>