我有一个与我的用户模型相关联的收藏模型。他的关系是用HasMany完成的。 所以我可以从这样的任何用户中检索所有收藏夹。
[User] => Array
(
[id] => 60
[username] => username
[email] => xxxxxx@gmail.com
)
[Favorite] => Array
(
[0] => Array
(
[id] => 7
[book_id] => 15
[user_id] => 60
[position] => 1
[created] => 2012-08-08 04:08:54
)
[1] => Array
(
[id] => 6
[book_id] => 17
[user_id] => 60
[position] => 1
[created] => 2012-07-26 04:08:32
)
)
但是这个结果并没有显示我所有的Book数据和相关对象。所以我决定用一个发现('all')找到它们列出id([15,16 ....])。唯一的问题是它没有链接到我在Favorite.created DESC上的订单。 它以另一种顺序检索我的图书项目。
我的查询实际上看起来像:
$result = $this->User->findById($id);
$conditions = array('Book.id' => Set::extract($result, 'Favorite.{n}.book_id'));
$favorites = $this->Book->find('all', array('conditions' => $conditions));
知道如何改变我的模型关系吗?或者我在cakephp的查询?
答案 0 :(得分:0)
您需要在图书模型和收藏模型之间创建联接。在您的情况下,您可以使用BindModel来创建Join。在我的例子中,我使用'hasOne'导致Cakephp不使用hasMany与hasMne和BelongsTo进行连接。
$this->Book->bindModel(array('hasOne' => array(
'Favorite' => array(
'className' => 'Favorite'))));
$id = $this->Auth->user('id');
$data = $this->Book->find('all', array(
'conditions' => array('Favorite.user_id' => $id),
'order' => array('Favorite.created' => 'DESC')));
就是这样。