Laravel的运营商如何运作?

时间:2018-11-14 00:40:23

标签: laravel laravel-5

with, where雄辩的运算符如何在Laravel中工作?

使用withwhere或这些运算符仅适用于结果数据模型之后,是否可以看到生成结果SQL查询?

with(<related model>)运算符是否可以作为INNER JOIN?

在哪里可以找到有关的信息?

4 个答案:

答案 0 :(得分:3)

要了解Laravel执行的SQL查询,可以使用toSql()函数:

$results = User::where(function($q) use ($request) {
    $q->orWhere('email', 'like', '%john@example.org%');
    $q->orWhere('first_name', 'like', '%John%');
    $q->orWhere('last_name', 'like', '%Doe%');
})->toSql();

dd($results); // output

选中此article,以获取有关此方面的更多信息。这种方法还有另一个alternative

关于您的下一个问题:,Laravel不执行JOIN。您可以在this article中阅读有关此方面的内容。


PD:如果您想进一步了解Eloquent的工作方式,可以遵循出色的Laracasts series

答案 1 :(得分:1)

由于使用with()将导致运行多个SQL语句,因此了解基础SQL的一种好方法是使用DB::enableQueryLog()DB::getQueryLog()

答案 2 :(得分:1)

根据上述SQL,您要查找名称为$needle或制造商名称为$needle的产品。猜猜您需要whereHas方法。

$products = Product::with("manufacturer")
                  ->whereHas('manufacturer',function($query) use ($needle){
                      $query->where("name","like","%{$needle}%");
                  })
                  ->orWhere("name","like","%{$needle}%")->get();

您还可以在查询条件相同的情况下将其添加到“ with”方法之前,以获取与其匹配的关系实例。如果是belongsTo,则可以在不指定条件的情况下使用它。

查看查询关系:https://laravel.com/docs/5.5/eloquent-relationships#querying-relations

答案 3 :(得分:1)

有两种获取有关with和where条件的详细信息的方法: -在开发环境中使用Laravel调试栏查看有关查询的详细信息。查询的结构,频率等是什么 -使用toSql函数转储查询