在查询中使用碳错误

时间:2018-06-21 12:17:04

标签: mysql laravel orm eloquent

在mysql中使用if条件时遇到问题

我正在尝试以下操作:

我有两种模型:Pubs和Schedules(我在其中静态存储Pubs Schedules)。它们之间的相互关系如下:

Pub:

/**
 * @return \Illuminate\Database\Eloquent\Relations\HasMany
 */
public function pubSchedules()
{
    return $this->hasMany( Schedule::class );
}

时间表:

/**
 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
 */
public function pub()
{
    return $this->belongsTo(Pub::class);
}

表计划具有以下字段:

id | pub_id | week_day |开幕时间|关闭时间

我正在开发一个过滤器,该过滤器仅显示当前时刻的开放酒吧。

我做的第一个功能很完美:

public static function isPubCurrentlyOpen($pubs)
{

    $pubs->whereHas('pubSchedules', function ($pubs) {
        $pubs->where('week_day', Carbon::now()->dayOfWeek)
            ->whereRaw(
                "'" . Carbon::now('Europe/Madrid')->format("H:i:s") .
                    "' BETWEEN opening_time AND closing_time

                    "
            );
    } );
 }

它返回可以与其他过滤器联接的查询。

问题是,当我有一家酒吧时,安排的时间是:当天09:00-03:00。当然,第二天是03:00,但我们选择这种可能性是为了使客户更容易存储时间表。

好吧,在本示例中,它使“ Carbon :: now('Europe / Madrid')-> format(“ H:i:s”)“不在opening_time和closeing_time之间,因此该发布店不会(打开时)显示为打开状态。

在MySql上进行一些测试,我尝试了如下操作:

SELECT *,
 CONCAT(YEAR(NOW()), '-', MONTH(NOW()), '-', `week_day`, ' ', 
  `opening_time`) AS `opening_datetime`,
   IF(`closing_time` < `opening_time`,
   CONCAT(YEAR(NOW()), '-', MONTH(NOW()), '-', `week_day` + 1, ' ', 
   `closing_time`),
   CONCAT(YEAR(NOW()), '-', MONTH(NOW()), '-', `week_day`, ' ', 
   `closing_time`)
) AS `closing_datetime`
FROM tappear_borrador.schedules
;

当它大于00:00时,可以完美地将“更一天”设置为“ closeing_time”,但是我无法在函数中设置该时间:

$pubs->whereHas('pubSchedules', function ($pubs) {
        $pubs->where('week_day', Carbon::now()->dayOfWeek)
            ->whereRaw(
                "'" . Carbon::now('Europe/Madrid')->format('Y-m-d H:i:s') .
                "' BETWEEN CONCAT(YEAR(NOW()), '-', MONTH(NOW()), '-', ".Carbon::now()->dayOfWeek.", ' ', opening_time)
                    AND IF(closing_time < opening_time,
                            CONCAT(YEAR(NOW()), '-', MONTH(NOW()), '-', ".Carbon::now()->dayOfWeek." + 1, ' ', closing_time),
                            CONCAT(YEAR(NOW()), '-', MONTH(NOW()), '-', ".Carbon::now()->dayOfWeek.", ' ', closing_time)
                    ) 

                    "
            );
    } );

这使我没有返回任何东西(也有任何错误)。 (((我还检查了json_die(Carbon :: now()-> dayOfWeek + 1)不会再返回当前值,这可能是问题之一吗?)),

检查当前时间是否已更改,以将年/月/小时:小时与开闭时间进行比较。

所以朋友:如果close_time <开幕时间,closeing_time在第二天,然后需要比较当前时刻,我需要您的帮助来改进我的最后一个代码。

有什么想法吗?非常感谢

0 个答案:

没有答案