如何使用 find 方法在 cakePHP 中创建子查询?例如:
SELECT *, (SELECT COUNT(*) FROM table2 WHERE table2.field1 = table1.id) AS count
FROM table1
WHERE table1.field1 = 'value'
!!!table2.field1 = table1.id !!!
如何使用 find 方法在 cakePHP 中创建子查询?例如:
SELECT *, (SELECT COUNT(*) FROM table2 WHERE table2.field1 = table1.id) AS count
FROM table1
WHERE table1.field1 = 'value'
!!!table2.field1 = table1.id !!!
另外,您可以使用 Cake 的 ORM 构建子查询。它会更容易。请阅读CakePHP 检索数据文档
一般来说,您可以使用对象buildStatement()
的方法DataSource
。您可以保存所有逻辑,包括分页等。
您可以通过以下两种方式之一执行此操作:
这允许您使用上面发布的查询直接执行 SQL,但请注意,如果要更改数据库架构,它会使您的应用程序变得非常脆弱。可能是最快的。(文档)
例子
$this->Model1->query("SELECT * FROM model;");
这可能不如选项 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']
)
)
);
}