2016-06-06 8 views
1

Ich versuche, die Beziehungen der Beziehungen eines Modells zu löschen. Wenn das irgendeinen Sinn ergibt?Löschen Sie die Beziehungen der Beziehungen in Laravel 5.2

$post->comments()->activities()->delete();

Also mein Post-Modell hat Kommentare und Kommentare haben Aktivitäten. Jedes Mal, wenn ich versuche, dies auszuführen, ich diesen Fehler:

Call to undefined method Illuminate\Database\Query\Builder::activities()

Ich weiß, dass dies funktioniert:

$post->load('comments.activities'); 

foreach ($post->comments as $comment) { 
    $comment->activities()->delete(); 
    $comment->delete(); 
} 

Aber ich denke, die erste Lösung sieht sauberer. Weiß jemand, warum das nicht funktioniert? Vielen Dank.

bearbeiten

Die Beziehung Methode in Post-Modell (polymorphe weil es Kommentare auf der Post und Kommentare zu Kommentaren).

public function comments() 
{ 
    return $this->morphMany('App\Models\Comment', 'commentable'); 
} 

Die Beziehung Methoden in Kommentar-Modell (polymorph, weil ich Aktivitäten auf mehrere Modelle verwenden).

public function activities() 
{ 
    return $this->morphMany('App\Models\Activity', 'subject'); 
} 
+0

u die Methode in Routen erklärt haben? –

+0

@Vicky Ich glaube nicht, Routen Methoden haben etwas mit diesem Problem zu tun. –

+0

können wir Ihre Beziehungsmethoden Ihres Modells sehen? – huuuk

Antwort

0

Haben Sie vor dem Schreiben die Tabellendefinition angegeben?

protected $table = 'posts'; 

Können Sie etwas über Ihr Problem ausarbeiten?

1

Versuchen

$post->comments->activities()->delete(); 

natürlich dies nur funktioniert, wenn Sie eine Eins-zu-viele Beziehungen auf beiden Modelle haben

+0

Ich habe das schon einmal versucht, aber das erzeugt einen weiteren Fehler. 'Methodenaktivitäten existieren nicht.'. Ich verwende polymorphe Beziehungen. –

+0

Es scheint, dass es in Laravel keine 'morphManyThrough' Beziehung gibt. Auf einen Blick denke ich, dass dein Ansatz mit foreach loop korrekt ist. – huuuk

Verwandte Themen