5

私は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 の場合は必ずしもここでは関係ありません。

4

1 に答える 1