CakePHP Paginate 2型号分为1组结果

时间:2012-07-11 14:05:21

标签: php mysql database cakephp

感觉就像我尝试了一切。我正在从2个数据表'Spec'和'Update'构建各种新闻源。这是CakePHP代码。

// Setup pagination
$this->paginate = array(
    'Spec' => array(
        'fields' => array(
            'Spec.id',
            'Spec.name'
        ),
        'limit' => 10,
        'conditions' => array(
            'Spec.car_id' => $id
        ),
        'order' => array(
            'Spec.created' => $orderSetting
        )
    ),
    'Update' => array(
        'fields' => array(
            'Update.id',
            'Update.name'
        ),
        'limit' => 10,
        'conditions' => array(
            'Update.car_id' => $id
        ),
        'order' => array(
            'Update.created' => $orderSetting
        )
    )
);
$updates = $this->paginate(array('Spec', 'Update'));

这是返回SQL错误。

SQL Error: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Update' at line 1

问题在于这一行 - 它只允许一个项目?     $ updates = $ this-> paginate(array('Spec','Update')); 例如。     $ updates = $ this-> paginate('Spec');

当然,这不是我想要的。

非常感谢任何帮助或指导。

1 个答案:

答案 0 :(得分:0)

paginate()函数不允许多个模型作为参数,因为它实际上只是find()函数(see docs)的代理。您的第二个参数('Update')将被视为find()调用的条件 - 这会导致SQL错误。

您需要在一个模型上创建一个find()调用,该模型会返回您想要的所有数据。您可以使用模型关系以及可能的ContainableBehavior包含来自其他模型的数据。

另一种方法是两个不同的find()操作并手动组合结果。但你也必须手动处理分页。