私はCakePHP v3.17 w / Postgres 9.4を使用しています
$this->SomeTable->deleteAll([...])
結合テーブルのレコードも削除しようとしています。
Stops
のテーブルと のテーブルを使用してバス システムをイメージングしますRoutes
。ストップは多くのルートに関連付けられており (複数のバス ルートがそれぞれに停車する可能性があるため)、ルートは明らかに多くのストップに関連付けられています。
RoutesTable.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 の場合は必ずしもここでは関係ありません。