2

使用 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 数据进行排序和限制。这是否可能与锂中的 hasMany 关系或 hasMany 无论如何总是返回所有相关数据?显然,我正在尝试的不是正确的方法。

4

2 回答 2

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'which 会导致类似 ...

SELECT ... ORDER BY Table2.title;

在这种ASC情况下是隐含的,但您也可以通过 ASC 或 DESC。

于 2012-12-08T01:28:53.933 回答
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
   )
);
于 2013-07-04T10:00:23.603 回答