Родительская модель все еще возвращает мягкий удаленный дочерний экземпляр

У меня есть родительская модельLibrary, которая имеет много Books. Красноречивый делает его так легко определить отношения. Я включил softdeletingрежим книги с помощью SoftDeletesпризнака.

Проблема:

При удалении экземпляра книги deleted_atатрибут экземпляра книги устанавливается на текущую метку времени (как и ожидалось).

Но когда я запрашиваю все книги, которые принадлежат кLibrary, Результат содержит все книги, включая те, которые были удалены.

Я только хочу получить тоbooks, что не было удалено.

class Library extends Model {
   public function books() {
      return $this->hasMany(Book::class);
   }
}

class Book extends Model {
   use SoftDeletes;
   public function library() {
      return $this->belongsTo(Library::class, 'library_id');
   }
}

$softDeleteBook = Book::find(1);
$softDeleteBook->delete();
$books = Library::find(1)->books;
// $books contains even $softDeleteBook
// I do not want to get $softDeleteBook

1 ответ

  1. @Elisha-Wigwe Chijioke. Вы добавили $table->softDeletes();в файл миграции.

    Пример модели выглядит следующим образом

    <?php 
    class Video extends Model
    {
        use SoftDeletes;
        protected $dates = ['deleted_at'];
    
        public function category()
        {
            return $this->belongsTo('LearnCast\Category');
        }
     }
    ?>
    

    Посмотрите пример построения схемы миграции

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('videos', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->timestamps();
            $table->softDeletes();
        });
    }
    

    Я надеюсь, что это поможет