基本上我在CakePHP中有以下模型:
User(id, username)
Photo(id, user_id, path)
我设置了以下关系:用户有很多照片。
在一个屏幕上,我想列出用户,并在每个用户旁边显示随机照片。我尝试建立以下关系:
用户hasOne SamplePhoto(其中SamplePhoto只是照片模型)
但是当用户有两张照片时,他会在列表中列出两次。
基本上我的问题是:你能否减少与hasOne的hasMany关系,而不向上面提到的表模式添加任何字段?我想告诉蛋糕 - 找到Photo表中与某个user_id匹配的第一条记录。
答案 0 :(得分:3)
您也可以使用Containable behaviour,然后设置如下内容:
$this->User->find(
'all',
array(
'contains' => array(
'Photo' => array(
'order' => 'rand()',
'limit' => 1
)
)
)
);
然后你应该得到像
这样的东西Array
(
[User] => Array
(
[id] => 121
[username] => tom
)
[Photo] => Array
(
[0] => Array
(
[id] => 123
[user_id] => 121
[path] => Somewhere
)
)
)
答案 1 :(得分:2)
如果您执行类似$ this-> User-> read(null,$ id)的查找,则返回将是一个类似于以下内容的数组:
Array
(
[User] => Array
(
[id] => 121
[username] => tom
)
[Photo] => Array
(
[0] => Array
(
[id] => 123
[user_id] => 121
[path] => Somewhere
)
[1] => Array
(
[id] => 124
[user_id] => 121
[path] => SomeOtherPlace
)
)
)
从这个阵列中你可以随意挑选照片,不管是第一个:
$this->data['Photo'][0]
最后一个:
$this->data['Photo'][count($this->data['Photo'])]
明确的记录:
$this->data['Photo'][3]
或通过一些随机方式:
$this->data['Photo'][$rnd]
答案 2 :(得分:2)
不要让它变得比它需要的更复杂。 :)
$data = $this->User->Photo->find('first',
array('conditions' => array('Photo.user_id' => $id)));
在$data['Photo']
中为用户添加$data['User']
附带的用户。
答案 3 :(得分:0)
你会做类似的事情:
$user = $this->User->find('first', array('conditions' =>
array('username'=>$this->data['User']['username'],
'active'=>true) ));