我怎么能在cakePHP中创建一个子查询?

时间:2013-05-04 11:34:15

标签: mysql cakephp cakephp-appmodel cakephp-2.3

如何使用find方法在cakePHP中创建子查询?例如:

SELECT *, (SELECT COUNT(*) FROM table2 WHERE table2.field1 = table1.id) AS count
FROM table1
WHERE table1.field1 = 'value'

!!! table2.field1 = table1.id !!!

2 个答案:

答案 0 :(得分:6)

只是为了添加,您可以使用Cake的ORM构建子查询。这会更容易。请阅读CakePHP retrieving data doc

通常,您可以使用buildStatement()对象的DataSource方法。您可以保存所有逻辑,包括分页等。

答案 1 :(得分:2)

您可以采取以下两种方式之一:

1。使用$ this-> Model-> query(...)

这允许您使用上面发布的查询直接执行SQL,但请注意,如果要更改数据库架构,它可能会使您的应用程序变得非常脆弱。可能是最快的。(Documentation

实施例

$this->Model1->query("SELECT * FROM model;");

2。分开通话

这可能不如选项1快,但它确实使您能够将查询分解为多个步骤。您也不太可能获得SQL注入,这是选项1的潜在风险。

实施例

$model1s = $this->Model1->find
(
    'all', 
    array
    (
        'conditions' => array('Model1.field1' => 'value')
    )
);
foreach($model1s as $model1)
{
    $model1['model2_count'] = $this->Model2->find
    (
        'count', 
        array
        (
            'conditions' => array
            (
                'Model2.field1' => $model1['id']
            )
        )
     );
}