laravel 查询:orWhere:双重条件
Posted
技术标签:
【中文标题】laravel 查询:orWhere:双重条件【英文标题】:laravel query: orWhere: double condition 【发布时间】:2015-02-26 18:24:35 【问题描述】:我有以下查询,但没有给我预期的结果:
$query = $query->join('events_dates', function($join) use ($data)
$join->on('events.id', '=', 'events_dates.event_id')
->where('events_dates.start_date', "<=", date_format(date_create($data['date_end']), "Y-m-d"))
->where('events_dates.end_date', '>=', date_format(date_create($data['date_start']), "Y-m-d"))
->orWhere('recurrent', "=", 1)
->where((strtotime($data["date_start"]) - strtotime('event_dates.start_date')) % ('events_dates.repeat_interval' * 86400), '=', 0);
);
此查询中有 4 个 where 子句。
要求是要么执行前两个 where 子句,要么执行最后两个,具体取决于 recurrent
field。
php 返回错误division by zero
,因为当recurrent
是0
时不应执行最后一个Where 子句。
有什么建议吗?
【问题讨论】:
您不能在 where 子句中的 SQL 列上使用像strtotime
这样的 PHP 函数。可以用 SQL 写吗?
可能,必须调查一下。 Laravel 似乎接受它,但我得到一个除以零的错误。不先评估吗?
嗯,刚刚意识到这种方法根本行不通。 where
期望第一个参数是数据库中的字段名称,所以我还没有找到另一种解决方法。最终我可以将所有经常发生的事件隔离到一个单独的表中,但我觉得这有点傻。
【参考方案1】:
我不知道你的确切目标,也不知道你的数据库是什么样的,所以这只是一个疯狂的猜测:
$query = $query->join('events_dates', function($join) use ($data)
$join->on('events.id', '=', 'events_dates.event_id')
->where('events_dates.start_date', "<=", date_format(date_create($data['date_end']), "Y-m-d"))
->where('events_dates.end_date', '>=', date_format(date_create($data['date_start']), "Y-m-d"))
->orWhere('recurrent', "=", 1)
->whereRaw('DATEDIFF(?, event_dates.start_date) % event_dates.repeat_interval = 0', array($data['date_start']));
更新
这可能有助于两个日期之间的部分
->where('events_dates.start_date', '<=', new Carbon($data['date_end']))
->where('events_dates.end_date', '>=', new Carbon($data['date_start']))
【讨论】:
我最终将经常性事件迁移到一个单独的表中,并最终加入结果。我运行以下查询:$query = $query->join('events_dates_recurrent', 'events.id', '=', 'events_dates_recurrent.event_id') ->whereRaw("ABS(DATEDIFF('" . $input_datestart . "', CAST(events_dates_recurrent.start_date AS DATE)) % events_dates_recurrent.repeat_interval) = 0");
目前仍在努力检查给定开始/结束日期之间的所有日期。我会接受你在路上帮助我的回答。
谢谢。这是一场斗争,我不是特别擅长查询。我发布了一个新问题:***.com/questions/27713474/…。如果你碰巧知道答案,我也会接受。以上是关于laravel 查询:orWhere:双重条件的主要内容,如果未能解决你的问题,请参考以下文章
laravel多字段模糊查找,用when+orwhere时其他条件失效
laravel多字段模糊查找,用when+orwhere时其他条件失效
laravel多字段模糊查找,用when+orwhere时其他条件失效
Laravel Eloquent Query 使用 Where、With、Where 和 orWhere 条件