【发布时间】:2016-08-23 16:39:05
【问题描述】:
在 CakePHP 3 中,假设我要删除所有 Departments 有一些名为“John”的 Employee(Departments 有很多 Employees,Employees 属于 Department)
最简单的方法是过滤所有这些部门,并在foreach循环中一个一个地删除它们:
$departments = $this->Departments->find()
->matching('Employees', function ($q) {
return $q->where(['Employees.name' => 'John']);
})
->all();
foreach ($departments as $department) {
$this->Departments->delete($department);
}
这将为每条记录生成一个 SELECT 查询和一个 DELETE 查询。我希望只有一个查询由数据库发送和执行。像这样的:
DELETE Departments
FROM departments Departments
INNER JOIN employees Employees ON
Employees.department_id = Departments.id
AND Employees.name = 'John';
阅读文档我发现了三种删除记录的方法:
- Using the Table object one by one,获取对象,然后删除。
- Using the Table with deleteAll,它采用目标表上的一组条件,而不是关联的条件。
- Using the ORM,同样只有一组条件。
有没有一种优雅的方式来使用 CakePHP 3 和 ORM 获取我的查询?
【问题讨论】:
标签: mysql cakephp cakephp-3.0