我正在使用带有 Postgres 9.4 的 CakePHP v3.17
我也在尝试$this->SomeTable->deleteAll([...])
删除连接表中的记录。
Stops
用一张表和一张表对总线系统进行成像Routes
。停靠点与许多路线相关联(因为多条公交路线可以在每条路线停靠)并且路线显然与许多停靠点相关联。
路由表.php:
$this->belongsToMany('Stops');
StopsTable.php:
$this->belongsToMany('Routes');
这是我想使用的删除逻辑,但由于连接表中的记录被遗留下来,所以不起作用:
$stopsTable = TableRegistry::get('Stops');
$stopsTable->deleteAll(['agency_id' => $agency->id]);
$routesTable = TableRegistry::get('Routes');
$routesTable->deleteAll(['agency_id' => $agency->id]);
这是可以工作的逻辑,但效率低下,因为它必须遍历每个站点:
$stopsTable = TableRegistry::get('Stops');
foreach ($agency->stops as $stop) {
$stopsTable->delete($stop);
}
$routesTable = TableRegistry::get('Routes');
$routesTable->deleteAll(['agency_id' => $agency->id]);
这样做的更好/正确方法是什么?
这是一个类似的问题,但对于 v2.x,因此在这里不一定相关。