где меняется имя таблицы - PullRequest
0 голосов
/ 15 марта 2019

Что-то довольно странное происходит в моих отношениях в Ларавеле. Особенно с 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, и оно вернуло правильную школу.

Кто-нибудь сталкивался с подобной проблемой раньше?

1 Ответ

0 голосов
/ 16 марта 2019

Спасибо всем за помощь, но проблема закончилась ошибкой проверки, а не самими отношениями.

Validator::validate($request->all(), [
  'school_id' => 'exists:school,id'
])

Обратите внимание на пропущенное s в школе.

Думаю, пришло время еще кофе.

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