Laravel - почему отношения Модели не загружаются? - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть сайт Laravel 5.3, и я думаю, что, может быть, у меня происходят какие-то странные вещи из-за некоторых действий, происходящих в контроллерах API, и некоторых, происходящих в обычных контроллерах.

Или, может быть, проблема, которая иногда возникаетЯ имею дело с моделью, а иногда и с Eloquent Collection.

Проблема в том, что я пытаюсь получить отношения на модели и получаю нулевое значение.

Например, у меня есть course Модель, относящаяся к week Модель.

В course Модель Я получаю week элементов как

  public function weeks()
    {

        return $this->hasMany(Week::class, 'course_id');

    }

В бэкэнде эти отношения отправляются следующим образом:

$course->load('weeks')

Все хорошо.

Но когда элемент course удаляется, и я пытаюсь действовать в контроллере week как курс

        static::deleting(function($course) { 
            $course->weeks->delete();
        });

$-> недели ноль.В то время я вижу в базе данных, что все хорошо, и эти course элементы действительно имеют отношение к week элементу, но $course показывает 0 отношений.

Так что происходит нечто странное, когда $course->webinars не захватывает week связанных предметов.

Есть ли что-то, что я в основном делаю неправильно?Может быть, это потому, что в моделях у меня есть такие утверждения:

protected $table = 'Week';

Они мешают установлению отношений?Я всегда думал, что у меня есть некоторая функция в модели, которая возвращает отношения, которые эти отношения всегда будут доступны, когда я использую синтаксис $course->weeks.

Идеи?

Еще раз спасибо,

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

Я думаю, что вы можете использовать Observers.В вашем AppServiceProvider сначала зарегистрируйте наблюдателя.

public function boot()
{
     Course::observe(CourseObserver::class);
}

Now, add an Observer class.

class CourseObserver
{
    public function deleting(Course $course)
    {
         $course->weeks()->delete();
    }
} 

0 голосов
/ 20 сентября 2019

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

Если у вас есть столбец course_id в таблице недель, добавьте это в свою миграцию

$table->foreign('course_id')
      ->references('id')->on('courses')
      ->onDelete('cascade')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...