with, where
雄辩的运算符如何在Laravel中工作?
使用with
,where
或这些运算符仅适用于结果数据模型之后,是否可以看到生成结果SQL查询?
with(<related model>)
运算符是否可以作为INNER JOIN?
在哪里可以找到有关的信息?
答案 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函数转储查询