2

Lithium フレームワークを使用して、Post と Image という 2 つのモデル クラスを作成しました。それらは、hasMany 関係を介して関連付けられています。

//Post.php
class Post extends \lithium\data\Model {
    public $hasMany = array('Image');
}

私の PostsController のクエリの 1 つで、順序で並べ替えられ、制限がある画像を含む投稿を見つけようとしています。ただし、画像の順序と制限のオプションは無視されています。私のクエリは次のようになります。

//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 個の画像がある場合、位置で並べ替えられた 3 個の制限ではなく、10 個すべての画像が返されます。

一般に、モデルの関連する hasMany データを順序付けて制限できるようにしたいという考えです。これは Lithium の hasMany 関係で可能ですか、それとも hasMany は常にすべての関連データを返しますか? 明らかに、私が試みていることは正しい方法ではありません。

4

2 に答える 2

1

ORDER BYLithium Relationships で使用する方法は次のとおりです ...

$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 も渡すことができます。

于 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 に答える