两个方法有哪些区别()和whereHas()?它们在laravel文档中看起来都非常相似。
答案 0 :(得分:3)
方法where()
的行为类似于常规SQL WHERE
查询部分。
方法has()
使用外键关系返回具有其他内容的内容。例如,Student::has('classes')->get();
将返回所有有课程的学生。
方法whereHas()
类似于常规has()
,但它允许您对搜索设置约束。与where()
不同,这是在子表而不是父表上完成的。这是一个例子:
$students = Student::where('name', 'Pingu') // constrains the students table
->whereHas('classes', function($query) {
$query->where('name', 'like', '%physics%'); // constrains the classes table
})->get();
在这个非常现实的例子中,你想要所有名叫Pingu的学生,他们正在上物理课。