如果所选日期在两个日期之间,如何从查询中获取结果?

指挥官

我正在尝试获取以下查询的结果:返回在选定日期可用的用户。用户已选择不可用的时间,并将其与开始日期时间和结束日期时间一起存储在“可用性”表中。这是我一直没有成功尝试的事情...我一直在找回错误的用户,并且如果他们设置了多个不可用时间段,它也会返回他们。

尝试#1

User::whereHas('availabilities', function($q)use($selected_date_time)
{
    $q->where('unavailable_start_date', '>', $selected_date_time)
    ->where('unavailable_end_date', '>', $selected_date_time);
})->orWhereHas('availabilities', function($q)use($selected_date_time)
{
    $q->where('unavailable_start_date', '<', $selected_date_time)
    ->where('unavailable_end_date', '<', $selected_date_time);
})->with('availabilities')->get();

尝试#2

User::whereHas('availabilities', function($q)use($selected_date_time)->whereHas('availabilities', function($q)use($selected_date_time)
{
    $q->whereRaw('? NOT BETWEEN `unavailable_start_date` AND `unavailable_end_date`', [$selected_date_time]);
})->get();

这是在try#1情况下执行的mysql查询:

 select * from `users` where `is_user` = ? and (select count(*) from `availabilities` where `availabilities`.`user_id` = `users`.`id` and `unavailable_start_date` > ? and `unavailable_end_date` > ?) >= 1 or (select count(*) from `availabilities` where `availabilities`.`user_id` = `users`.`id` and `unavailable_start_date` < ? and `unavailable_end_date` < ?) >= 1

约会的日期:

selected string(19) "2014-11-13 11:00:00"

unavailableStart string(19) "2014-11-12 11:30:00"

unavailableEnd string(19) "2014-11-18 11:00:00"

蚂蚁知道出了什么问题或如何解决这个问题?

编辑完整查询

$photographers_available =  Photographer::where('is_photographer', '=', '1')
                            ->whereHas('studioAddress', function($q)use($city_id)
                                                                   {
                                                                        $q->where('city_id', '=', $city_id);
                                                                   })
                            ->orWhereHas('user', function($q)use($city_id)  // TK could reduce to 'user.address' I think
                                                                     { 
                                                                        $q->whereHas('address', function($q)use($city_id) 
                                                                                     {
                                                                                        $q->where('city_id', '=', $city_id);
                                                                                     });
                                                                     })
                           ->whereHas('stypesPhotographer', function($q)use($stype)
                                                                   {
                                                                        $q->where('shooting_type_id', '=', $stype);
                                                                   })
                            ->where(function ($q) use ($selected_date_time) {
                            $q->whereHas('availabilities', function($q)use($selected_date_time)
                            {
                                $q->where('unavailable_start_date', '>', $selected_date_time)
                                ->where('unavailable_end_date', '>', $selected_date_time);
                            })->orWhereHas('availabilities', function($q)use($selected_date_time)
                            {
                                $q->where('unavailable_start_date', '<', $selected_date_time)
                                ->where('unavailable_end_date', '<', $selected_date_time);
                            });
                            })
                            ->with('availabilities')
                            ->get();

经过思考,会导致错误的or或在哪里?

谢谢!

滞后箱
User::whereHas('availabilities', function ($q) use ($dt) {
    $q->where('unavailable_start_date', '<=', $dt)
      ->where('unavailable_end_date', '>', $dt);
}, '=', 0)->get();

因此,我们在某种程度上扭转了这一局面。我们在其中必须查找范围内的可用性和不可用性的地方设置查询。因此,我们正在查询所有不可用的记录(以某种方式)。然后,通过使用whereHas('=', 0的其他参数,仅捕获不具有符合此条件的关系的用户

因此,无论具有多少可用性记录,任何属于该时间范围的具有这种关系的用户都不会返回。如果他们中的任何一个合格,他们将不会通过过滤器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在graphql中的两个日期之间查询

如何查询 ElasticSearch 中两个日期之间的索引?

MDX:如何获取MDX查询中两个日期之间的星期

如何获取JavaScript中两个日期之间的天数?

如何获取JavaScript中两个日期之间的区别?

Laravel Eloquent 中两个日期之间的日期查询

如何获取两个日期之间的日期

如何获取两个日期之间的所有日期?

获取两个日期之间的日期

获取SQL中两个日期之间的日期列表

获取日期在表中两个日期之间的对象

LINQ查询结果以获取两个日期之间的十进制总和

获取两个日期范围之间以及基于所选星期的所有日期

如何在Swift 3中比较两个日期(NSDate)并获取它们之间的日期?

如何在C#中获取两个日期之间的日期

如何在oracle中获取特定月份的两个日期之间的日期列表

如何在 Google AppMaker 中获取两个日期之间的日期范围?

如何获取laravel中两个日期之间的日期数组?

如何获取一周中给定的两个日期之间的所有日期?

当两个日期不同时,如何在javascript中获取两个日期之间的差异

如何获得两个日期时间之间的linq结果?

如果存在于php中,则获取两个日期之间的周末

当结果仅保留属性有效的开始日期时,如何在两个日期之间进行MySQL查询?

如何使用MySQL在两个日期之间查询?

如何使用codeigniter活动记录编写查询以获取两个日期之间的行数据?

从两个不同日期之间的mysql查询中获取最大和最小小时

比较两个日期并在android中获取结果

如何获取两个日期范围之间的归档总和,其中表中给出了从日期到日期

如何使用JavaScript获取两个日期之间的差异