使用Lithium框架,我有两个模型类,Post和Image。它们通过hasMany关系相关。
//Post.php
class Post extends \lithium\data\Model {
public $hasMany = array('Image');
}
在我的PostsController中的一个查询中,我试图找到一个带有按订单排序并有限制的图像的帖子。但是,图像上的顺序和限制选项被忽略。这是我的查询:
//PostsController.php
$post = Post::find('first', array(
'with'=>array(
'Image'=>array(
'order'=>array('position'=>'ASC'),
'limit'=>3
)
),
'conditions'=>array(
'Post.id'=>'some-id-value'
)
));
此特定查询返回包含所有相关图像的帖子,而不是按“位置”排序。例如,如果这篇文章有10个与之相关的图像,那么所有10个图像都会随之返回,而不是仅按照3的限制,按位置排序。
一般来说,我的想法是希望能够订购和限制模型的相关hasMany数据。这可能与Lithium中的hasMany关系有关,或者hasMany总是会返回所有相关数据,无论如何?显然,我所尝试的并不是正确的做法。
答案 0 :(得分:1)
以下是如何将ORDER BY
用于锂关系......
$table1_table2 = Table1::find('all', array(
'conditions' => array('Table1.foo' => 'bar'),
'with' => array('Table2'),
'order' => array('Table2.title'),
'limit' => 3
));
注意'Table2.title'
会产生类似......
SELECT ... ORDER BY Table2.title;
在这种情况下隐含ASC
,但您也可以传递ASC或DESC。
答案 1 :(得分:0)
您可以添加最终查询吗?据我所知,MySQL根本不能在JOIN中限制和排序,只能在子查询中。
因此,在这种情况下,2个请求优于1个连接:
首先Post::find(...conditions...)
然后
$images = Image::find(array(
'order' => array('post_id','position'),
'limit' => 3,
'conditions' => array(
'post_id' => $array_of_post_id_from_first_query
)
);