【发布时间】:2014-06-27 03:56:24
【问题描述】:
在 Laravel 中,我有两个名为 Booking 和 Clients 的表。对于特定的预订,我与单个客户有 belongsTo 关系。当我向客户查询预订时,一切正常,除非我包括 orWhere。请看下面的代码sn-p。
if($client_name!=null)
{
$client_name='%'.$client_name;
$bookings=$bookings->whereHas('client',function($q) use ($client_name){
$q->where('first_name','LIKE',$client_name)
//->orWhere('last_name','LIKE',$client_name);
});
}
使用注释掉的 orWhere 行,我可以使用用户指定的first_name 与客户进行适当的预订。但是当我在 last_name 的查询中使用 or 时,所有行都显示为好像 last_name 与每一行匹配。
它有什么问题?请帮忙。
【问题讨论】:
-
检查以
DB::getQueryLog()运行的查询,例如 -
以下是最后一个输出: select * from
throttlewhereuser_id= ?限制 1. 我正在使用 Sentry 包进行身份验证。上面的查询在管理页面中运行。 -
这并没有告诉我们任何信息,请检查
clients表。只需运行您粘贴的代码并立即dd(DB::getQueryLog())或使用 artisan tinker 在 CLI 中执行此操作 -
在上面的代码给出输出之后运行 dd(DB::getQueryLog()):array(2) { [0]=> array(3) { ["query"]=> string (44) "select * from
userswhereid= ? limit 1" ["bindings"]=> array(1) { [0]=> int(1) } ["time"]=> float( 1) } [1]=> array(3) { ["query"]=> string(52) "select * fromthrottlewhereuser_id= ? limit 1" ["bindings"]=> array(1 ) { [0]=> int(1) } ["time"]=> float(1) } }。不知道为什么它不显示与预订表相关的查询。 -
哦,好吧..因为您没有运行查询!在末尾附加
get()或first(),因此$bookings将保存查询结果而不是查询生成器。
标签: php database laravel-4 eloquent