Sono su CakePHP v3.17 w/Postgres 9.4CakePHP DeleteAll per molti a molti rapporti non rimuove unirsi record
che sto cercando di ottenere $this->SomeTable->deleteAll([...])
per rimuovere i record nella tabella join troppo.
Immagine di un sistema bus con una tabella per Stops
e una tabella per Routes
. Le fermate sono associate a molte rotte (poiché le linee di autobus multiple possono fermarsi a ciascuna) e le Rotte ovviamente sono associate a molte fermate.
RoutesTable.php:
$this->belongsToMany('Stops');
StopsTable.php:
$this->belongsToMany('Routes');
Ecco la logica di eliminazione voglio usare, ma non funziona perché i record nella tabella unirsi sono lasciati :
$stopsTable = TableRegistry::get('Stops');
$stopsTable->deleteAll(['agency_id' => $agency->id]);
$routesTable = TableRegistry::get('Routes');
$routesTable->deleteAll(['agency_id' => $agency->id]);
Ecco la logica che funziona, ma inefficiente perché deve eseguire un ciclo su ogni singolo s top:
$stopsTable = TableRegistry::get('Stops');
foreach ($agency->stops as $stop) {
$stopsTable->delete($stop);
}
$routesTable = TableRegistry::get('Routes');
$routesTable->deleteAll(['agency_id' => $agency->id]);
Qual è il modo migliore/corretto per farlo?
Ecco uno similar question ma per v2.x quindi non necessariamente rilevante qui.
c'è una prova di unità nel nucleo CakePHP che copre la vostra caso e garantisce che i record della tabella di join vengano cancellati? In caso contrario, segnalalo come problema su Github. Sei sicuro che solo i record della tabella di join vengono lasciati e non anche i record delle tabelle unite? Prova a impostare ''dependent' => true,' per il tuo socio, non sono sicuro che sia di default vero al momento. – burzum
Ciao @burzum L'ho provato con il dipendente => true, e sì, sono sicuro che sono rimasti solo i record della tabella di join perché sto testando su tavoli vuoti ... Quindi dopo il test le fermate e i percorsi sono vuoti ma routes_stops è ancora pieno. Non sono sicuro della domanda del test di unità ... – emersonthis
Potrebbe essere necessario abilitare [eliminazioni a catena] (http://book.cakephp.org/3.0/en/orm/deleting-data.html#cascading-deletes) invece di solo dipendente. –