繁体   English   中英

Laravel Eloquent 查询过滤器不工作

[英]Laravel Eloquent Query Filter not working

嗨,我是编程新手。 我的应用程序有一个过滤器 function。 其中用户 select 在前端有两个日期。 在 eloquent 查询中,它应该返回用户自己发布的记录或其他用户发布的记录设置为公共,并根据给定的日期过滤记录。 这是代码:

$maps = Mapdata::where('userid', Auth::user()->id)->ORwhere('public', 1)->whereBetween('from', array($request->from, $request->to))->ORwhereBetween('to', array($request->from, $request->to))->orderBy('id', 'DESC')->get();

我注意到日期和时间过滤器没有捕获所有相关记录。 例如:从 22/5/21 到 23/5/21 的过滤器应该返回 3 条记录。 预期结果,但它显示实际结果 此外,显示的记录之一甚至不是公共记录。 请指导我如何做到这一点

我认为您需要结合下面的位置

$maps = Mapdata::where('userid', Auth::user()->id)
                    ->ORwhere('public', 1)->where(function($query){
                    $query->whereBetween('from', array($request->from, $request->to))
                    $query->ORwhereBetween('to', array($request->from, $request->to))
                    })->orderBy('id', 'DESC')->get();

更新

$maps = Mapdata::where('userid', Auth::user()->id)
                    ->ORwhere('public', 1)->where(function($query)use($request){
                    $query->whereBetween('from', array($request->from, $request->to))
                    $query->ORwhereBetween('to', array($request->from, $request->to))
                    })->orderBy('id', 'DESC')->get();

您需要将条件包装在要添加的附加位置(以进行查询,因此它应该可能是这样的:

$maps = Mapdata::where(function($q) {
   $q->where('userid', Auth::user()->id)->orWhere('public', 1); 
})->where(function($q) use ($request) {
   $q->whereBetween('from', array($request->from, $request->to))->orWhereBetween('to', array($request->from, $request->to));
})->orderBy('id', 'DESC')->get();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM