在哪里更改了表的名称

时间:2019-03-15 20:11:12

标签: php laravel eloquent

我在Laravel的关系中发生了非常奇怪的事情。尤其是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'));
            });

错误

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而不是{{1} }。

我尝试使用Tinker检查该关系是否正确,并且确实是schools,并且返回正确的学校。

任何人以前都遇到过这样的问题吗?

1 个答案:

答案 0 :(得分:0)

谢谢大家的帮助,但问题最终是验证错误,而不是关系本身。

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

请注意在学校遗失的s

我想是时候喝点咖啡了。