2016-05-19 2 views
1

Ich habe eine Tabelle (Benutzer), die Daten in einer anderen Tabelle (Reihenfolge) hat und die Verbindung zwischen ihnen ist eins zu viele.Wie verwandte Datensatz in Yii 2 löschen?

Bei this example sehe ich, wie Sie eine verwandte Daten (Reihenfolge) erstellen. Aber wie kann ich diese Daten (Bestellung) löschen, wenn ich über den Benutzer gehe?

$customer = Customer::findOne(123); 
$order = new Order(); 
$order->subtotal = 100; 

// setting the attribute that defines the "customer" relation in Order 
$order->customer_id = $customer->id; 
$order->save(); 
$order->id; //e.g. 1 

Und mein Ansatz zu löschen wäre:

$order = $customer->getOrders() 
    ->where(['=', 'id', 1]) 
    ->all(); 
$order->delete(); 

dies der richtige Weg ist?

Hinweis: Ich verwende Einschränkungen.

+1

Sie diese Einschränkungen in der Datenbank umgehen konnte – soju

+0

Ja, es in meiner Datenbank Zwänge behandelt wird. Ich frage nur, ob dieser Ansatz der richtige ist. – Jurik

+0

Es ist definitiv nicht falsch, aber ist einfach unnötig, da Sie Ihre Beschränkung bereits eingerichtet haben. Wenn Sie eine andere Verarbeitung durchführen möchten (z. B. das Protokoll, dass die Aufträge des jeweiligen Benutzers gelöscht wurden), können Sie dies in der von @shivani erwähnten Methode verarbeiten. – KST

Antwort

2

können Sie beforeDelete oder AfterDelete() zum Löschen im Zusammenhang Tabellendaten

einfaches Beispiel verwenden:

public function beforeDelete(){ 
    foreach($this->location_children as $c) 
     $c->delete(); 
    return parent::beforeDelete(); 
} 
+0

Ich dachte, in einer relationalen Datenbank und verwendet Constraints + Yiis aktive Datensätze benötigen Sie solche Aktionen nicht? – Jurik

+0

Ja Mit Einschränkungen auf Datenbankseite können Sie Ihr Ziel erreichen, und in Zukunft haben Sie eine Methode, um verwandte Daten zu löschen. –