使用Cake PHP的find方法来限制特定模型中的记录数

时间:2012-02-07 12:36:16

标签: cakephp

我有以下查找功能:

$this->MyModel->find('all', array('conditions' => array('id' => $id)));

返回此表单的数组

Array
(
    [Model1] => Array
        (
            [Model1] => Array
                (
                    ...
                    ...
                )
        )
    [Model2] => Array
       (
            [0] => Array
                (
                    ...
                    ...
                )
            [1] => Array
                (
                    ...
                    ...
                )
            [2] => Array
                (
                    ...
                    ...
                )
            ...
            ...
            ...

            )
)

如何更改find all以限制获取第二个模型的元素数量(Model2)?

我可以添加conditions => array( 'limit' => 10 )但是这限制了外部数组的元素数量 - 而不是Model2,即第二个嵌套数组!

有什么想法吗?谢谢你:)。

2 个答案:

答案 0 :(得分:2)

您应该在此处使用cake的containable行为来限制第二个模型的记录。以下是使用Contaable实现此目的的方法。

    $this->Model->contain = array('Model2' => array('limit' => 10));
    $this->Model->find('all', array('conditions' => $conditions));

现在,您将从Model2获得最多10条记录。

答案 1 :(得分:1)

如果您每次执行查找时都要执行此操作('all'),则可以在模型中的关联数组中使用'limit'参数:

public $hasMany = array(
    'OtherModel' => array(
        'className' => 'OtherModel',
        'foreignKey' => 'model_id',
        'limit' => 10
    )

或者,您也可以在调用find()方法之前修改此值:

$this->MyModel->hasMany['OtherModel']['limit'] = 10;
$this->MyModel->find('all', array('conditions' => array('id' => $id)));