【发布时间】:2019-12-28 09:05:24
【问题描述】:
我在两个表one 和two 中有一个相似的(area)值,这两个表与主表master 有关系。一次,master 表将只有一个关系中的数据,而另一个关系将是 null。
使用这种架构,我有一个搜索页面,用户可以在其中搜索与这些表相关的任何值,并且搜索字段以AND 条件放置。
在这里,如果用户为area 输入一些值,我需要检查任一表(one 或two)中是否存在区域值,而不会破坏AND 条件。尝试了下面的代码,但它违反了AND 规则并考虑了OR。有什么建议可以解决吗?
$result = Master::where(function ($query) use ($request) {
if ($request->filter == true) {
$query->where('user_id', Auth::user()->id);
}
// other conditions here
if (!empty($request->area_from) && !empty($request->area_to)) {
$query->whereHas('one', function ($query) use ($request) {
$query->whereBetween('area', [$request->area_from, $request->area_to]);
});
$query->orWhereHas('two', function ($query) use ($request) {
$query->whereBetween('area', [$request->area_from, $request->area_to]);
});
}
// other conditions here
})->with(['one', 'two'])->paginate($request->item);
【问题讨论】:
-
我不太明白你打破
AND的意思。 -
@IGP 所有搜索字段应以
AND分隔。但是由于orWhereHas,这里的条件是从该文件中获取所有内容,而不考虑以前的条件。 -
哦!只需将另一个 where 闭包封装 whereHas
标签: php mysql laravel laravel-5 eloquent