我的查询是这样的:
$search = $request->get('search');
$search_date = $request->get('search_date');
$store = Store::whereDate('updated_at', $search_date)->orWhereHas('user'), function($query) use ($search) {
$query->where(function ($q) use($search)
{
$q->where('name', 'LIKE', '%',$search.'%');
});
})->paginate(10);
执行时,没有错误。但结果与过滤日期不匹配
当我只使用没有位置的wheredate时,它与过滤器匹配
wheredate
和wherehas
不能同时运行?
更新
我有2个输入文本,即datepicker的输入文本和搜索名称的输入文本。当用户想要搜索时,他可以输入更新的日期和输入名称。然后单击搜索按钮。系统会过滤掉它。
答案 0 :(得分:0)
您使用了orWhereHas
。如果您想要两个游览标准(wheredate和wherehas),您应该使用wherehas
而不是orWhereHas
:
$store = Store::whereDate('updated_at', $search_date)->whereHas('user'), function($query) use ($search) {
$query->where(function ($q) use($search) {
$q->where('name', 'LIKE', '%',$search.'%');
});
})->paginate(10);
换句话说,如果您需要两个条件都为真,请使用and
,而不是or
(and
隐含在laravel查询构建器中)