Intereting Posts

Мягкое удаление Каскадирование с помощью Laravel 5.2

Я пытаюсь реализовать мягкое удаление в Laravel.

Вот мои отношения

Tournament ( hasMany ) CategoryTournament (hasOne) CategorySettings Tournament ( hasMany ) CategoryTournament (belongsToMany) CategoryTournamentUser 

Итак, я использовал этот ответ, который очень помог мне

Теперь, когда я SoftDelete турнира, все связанные с CategoryTournaments также удаляются.

Но затем я попытался применить его рекурсивно, поэтому я написал тот же код в ModelTournament Model:

 static::deleting(function($categoryTournament) { $categoryTournament->settings()->delete(); $categoryTournament->users()->delete(); }); 

Но этот код никогда не запускается. Я проверил, что у меня есть настройки и пользователь для удаления, но ни один из них не является мягким удаленным …

Я что-то пропустил??? Он должен работать!

РЕДАКТИРОВАТЬ:

Теперь я пытаюсь Soft удалить пользователя, это всего лишь еще один уровень:

 User (HasMany) Tournament ( hasMany ) CategoryTournament (hasOne) CategorySettings 

Итак, теперь, когда я мягко удаляю пользователя, он удаляет его турниры, но он больше не удаляет его CategoryTournaments, так что это не ошибка конфигурации.

Solutions Collecting From Web of "Мягкое удаление Каскадирование с помощью Laravel 5.2"

Внутри вашего static boot метода static boot вам нужно выполнить итерацию через ваши отношения toMany .

Fa:

 namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Tournament extends Model { use SoftDeletes; public function categoryTournament() { return $this->hasMany(CategoryTournament::class); } protected static function boot() { parent::boot(); static::deleting(function($tournament) { foreach ($tournament->categoryTournament()->get() as $ct) { $ct->delete(); } }); } } 

Другие файлы должны выглядеть так:

CategoryTournament.php

 namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class CategoryTournament extends Model { use SoftDeletes; public function tournament() { return $this->belongsTo(Tournament::class); } public function settings() { return $this->belongsTo(Settings::class); } protected static function boot() { parent::boot(); static::deleting(function($categoryTournament) { var_dump('categoryTournament'); $categoryTournament->settings()->delete(); }); } } 

Settings.php

 namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Settings extends Model { use SoftDeletes; public function categoryTournament() { return $this->hasOne(CategoryTournament::class); } protected static function boot() { parent::boot(); static::deleting(function($settings) { var_dump('settings'); }); } } 

Migration

 use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateTables extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('tournaments', function (Blueprint $table) { $table->increments('id'); $table->timestamps(); $table->softDeletes(); }); Schema::create('settings', function (Blueprint $table) { $table->increments('id'); $table->timestamps(); $table->softDeletes(); }); Schema::create('category_tournaments', function (Blueprint $table) { $table->increments('id'); $table->integer('tournament_id')->unsigned(); $table->integer('settings_id')->unsigned(); $table->timestamps(); $table->softDeletes(); $table->foreign('tournament_id')->references('id')->on('tournaments'); $table->foreign('settings_id')->references('id')->on('settings'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('category_tournaments'); Schema::drop('settings'); Schema::drop('tournaments'); } }