首页 > 解决方案 > Laravel如何从现在工作的数据库中获取餐馆?

问题描述

我需要实现一个功能,允许餐厅经理为其餐厅设置营业时间。所以我有Restaurant模型(对于这种情况,只有 ID)。

我还创建了RestaurantOpeningHour包含餐厅数据的模型:

class RestaurantOpeningHour extends Model
{
    protected $fillable = [
        'restaurant_id',
        'pickup_type_id',
        'week_day',
        'from_date',
        'until_date',
        'from_hour',
        'until_hour',
        'is_closed'
    ];

    public function restaurant()
    {
        return $this->belongsTo(Restaurant::class);
    }

    public function pickupType()
    {
        return $this->belongsTo(PickupType::class);
    }
}

业务需要一个功能,其中餐厅具有“默认”营业时间和自定义营业时间,这只会影响日期的音调。因此,一周中的每一天在数据库中都有自己的行,但 1 天可以有 2 行:“默认”行和“自定义”行。自定义行的优先级高于“默认”行。

我的目标是使用 eloquent 范围找到现在以雄辩方式开业的餐厅。所以我需要scopeOpenNow()在模型中创建一个范围Restaurant,它将实现以下逻辑:

现在我坚持关于LIMIT 1. 我不明白如何创建一个范围来实现上面列表中的所有项目。

我将不胜感激任何帮助 :)

标签: phplaraveleloquent

解决方案


我仍然不确定我是否完全理解,如果您可以提供一些示例数据来使用会更好。

这应该让你开始: -

<?php

namespace App;

use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;

class Restaurant extends Model
{
    public function scopeOpenNow($query)
    {
        $now = Carbon::now();
        $dayOfTheWeek = Carbon::now()->dayOfWeek;

        return $query->where(['day', '=', $dayOfTheWeek],
            ['from_date', '>=', $now], ['from_hour', '<=' , $now],
            ['until_date', '<=', $now], ['until_hour', '>',$now])
            ->orWhereNull('from_date')
            ->orderBy('from_date', 'ASC')
            ->take(1)
            ->get();
    }
}

推荐阅读