我有以下代码:
$current_user = $this->User->find('first', array(
'recursive' => -1,
'conditions' => array('User.id' => $user_id),
'fields' => array(
//User
'User.id',
//Profile
'Profile.user_id',
'Profile.id',
'Profile.first_name',
'Profile.last_name',
'Profile.media_asset_id',
//Profile Picture
'MediaAsset.id'
),
'joins' => array(
array(
'table' => 'profiles',
'alias' => 'Profile',
'type' => 'left',
'conditions' => array(
'Profile.user_id = User.id'
)
),
array(
'table' => 'media_assets',
'alias' => 'MediaAsset',
'type' => 'left',
'conditions' => array(
'MediaAsset.id = Profile.media_asset_id'
)
)
)
));
连接工作完美,又称返回User,Profile和MediaAsset。但是,如果我允许Cake为我找到它,那么它将导致这种结构:(示例1)
User
Profile
---- MediaAsset
然而,手册发现如下:(示例2)
User
Profile
MediaAsset
无论如何,如果不进行更多查询,我可以检索它类似于Cake吗?
谢谢,Josh。
**编辑 澄清我想要实现的目标。 我的数据库将有很多表,并且很多表链接到User。但是我不想检索所有这些因为它浪费资源。 因此,我为每个请求运行的查询指定了手动连接,例如当前用户。
问题是我需要在Profile中获取MediaAsset,这样做很好(参见示例2)。但是Cake很好的格式化更有意义。
**给scrowler 此查找结果返回所有内容(用户,配置文件,车库,首选项,任何具有user_id的模型)
if (!$username || !$user = $this->find('first', array(
'conditions' => array('User.username' => $username),
'contain' => array(
'Profile'
)
))) {
throw new NotFoundException('User not found');
}
答案 0 :(得分:0)
在我的AppModel.php中我有:
public $actsAs = array('Containable');
然后在我有find方法的模型中:
$rs = $this->find('all', array(
'recursive' => -1,
'order' => array('User.created DESC'),
'contain' => array(
'Profile' => array(
'MediaAsset' => array('fields' => array('id','profile_id' .... ),
'fields' => array('id', 'created', .... )),
),
));
所有工作都没有任何问题,只是不要忘记添加'recursive'=> -1使用包含时。