ich eine Erinnerung Tabelle, die eine Eins-zu viele Beziehung auf sich hat, , so habe ich diese Tabelle:
id: Primärschlüssel
reminder_id: meine Fremdschlüssel zu Erinnerung Tabelle
, so dass ich einen Datensatz mit Schlüssel id=1
haben könnte, und viele andere Datensätze, die sich darauf beziehen mit reminder_id=1
.Laravel 5.4 Detach Rekord von Pivot auf löschen
Ich habe auch eine Benutzer-Tabelle, mit seiner ID, und eine reminder_user zu viele Beziehung zu hanlde.
Die Beziehung funktioniert gut, so dass vom Benutzer kann ich seine Erinnerungen abrufen, aus einer Erinnerung seiner Kinder Erinnerung und so weiter.
Das Erinnerung Modell:
class Reminder extends Model {
public function users() {
return $this->belongsToMany("App\Models\User");
}
public function reminder() {
return $this->belongsTo("App\Models\Reminder");
}
public function reminders() {
return $this->hasMany("App\Models\Reminder");
}
}
Das Benutzer Modell:
class User extends Authenticatable
{
use Notifiable;
public function reminders() {
return $this->belongsToMany("App\Models\Reminder");
}
}
Mein Problem ist, dass, wenn ich eine Erinnerung aktualisieren, wird der Datensatz in meiner Pivot-Tabelle reminder_user wird nicht gelöscht .
Ich habe versucht, diesen Beobachter zu erstellen:
namespace App\Observers;
use App\Models\Reminder;
class ReminderObserver {
public function deleting(Reminder $reminder)
{
$reminder->users()->detach();
}
}
und an den appservice Anbieter hinzugefügt:
public function boot()
{
//...
Reminder::observe(ReminderObserver::class);
}
aber bisher werden die Datensätze in reminder_user Tabelle nicht gelöscht werden, wenn ich tun diese Transaktion:
DB::transaction(function()use($reminder, $repeated, $user) {
//delete old reminders
$reminder->reminders()->delete();
//add many new reminders
$reminder->reminders()->saveMany($repeated);
//save new relation with user
$user->reminders()->saveMany($repeated);
//update current reminder
$reminder->save();
});
Update
Wie von der Antwort ist das Problem, dass das Aufrufen von delete() auf dem Abfrage-Generator die Modellbeobachter nicht auslöst.
Mögliche Duplikat [Laravel Eloquent ORM - viele zu viele Delete Pivot-Tabelle Werte übrig] (http://stackoverflow.com/questions/27330551/laravel-eloquent-orm-many-to-many-delete-pivot-table-values-left-over) – Spholt