Laravel:where和where之间的差异

Laravel:where和where之间的差异,laravel,Laravel,where()和whereHas()这两个方法之间有什么区别?它们在laravel文档中似乎非常相似。方法where()的行为类似于常规的SQLwhere查询部分 方法has()使用外键关系返回包含其他内容的内容。例如,Student::has('classes')->get()将返回所有上课的学生 方法whereHas()类似于常规的has(),但它允许您对搜索施加约束。与where()不同,这是在子表而不是父表上完成的。下面是一个例子: $students = Student::where(

where()和whereHas()这两个方法之间有什么区别?它们在laravel文档中似乎非常相似。

方法
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的学生都在上物理课。

方法
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的学生都在上物理课。

如果我想在透视表(而不是子表)中添加列约束,该怎么办?我能用那个结尾的什么地方吗?可能不行,我不太记得了。如果我需要这种查询能力,我通常会将透视表制作成一个中间模型。如果我想在透视表(而不是子表)中添加列约束,该怎么办?我能用那个结尾的什么地方吗?可能不行,我不太记得了。如果我需要这种查询能力,我通常会将数据透视表制作成一个中间模型。