Что-то довольно странное происходит в моих отношениях в Ларавеле. Особенно с whereHas
.
Я пытаюсь получить все Lecture
, которые принадлежат определенному School
. У меня есть следующая структура:
Lecture -> Course -> School
.
У меня определены следующие отношения:
Lecture.php
public function course(){
return $this->belongsTo(Course::class, 'course_id');
}
Course.php
public function school(){
return $this->belongsTo(School::class, 'school_id');
}
Применение отношения:
$lectures = $lectures->whereHas('course.school', function ($q) use ($request){
$q->where('id', $request->get('school_id'));
});
Error
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'calendarzito.school' doesn't exist (SQL: select count(*) as aggregate from `school` where `id` = 2)
Обратите внимание, что s
отсутствует в school
.
Что я пробовал:
Сначала логически я подумал, что у Model School плохое имя, и попытался вручную определить имя таблицы с помощью protected $table = 'schools'
, но имя таблицы все равно меняется на school
, а не schools
.
Я пытался с помощью Тинкера проверить правильность отношений, и это действительно было Lecture::first()->course->school
, и оно вернуло правильную школу.
Кто-нибудь сталкивался с подобной проблемой раньше?