我在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
,并且返回正确的学校。
任何人以前都遇到过这样的问题吗?
答案 0 :(得分:0)
谢谢大家的帮助,但问题最终是验证错误,而不是关系本身。
Validator::validate($request->all(), [
'school_id' => 'exists:school,id'
])
请注意在学校遗失的s
。
我想是时候喝点咖啡了。