Я пытаюсь сделать следующее: у меня есть две модели (Pub и Schedule), связанные отношением 1xN следующим образом:
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 |день недели |Время открытия |close_time |
Я использую следующую функцию, чтобы узнать, открыт ли в данный момент (или нет) один паб:
/**
* @return bool
*/
public function isPubCurrentlyOpen()
{
$schedules = Schedule::where([
['pub_id', $this->id ],
['week_day', Carbon::now()->dayOfWeek],
])->get();
foreach ($schedules as $schedule){
$isOpen[] =
Carbon::now('Europe/Madrid')->between(
Carbon::now('Europe/Madrid')->setTimeFromTimeString($schedule->opening_time),
Carbon::now('Europe/Madrid')->setTimeFromTimeString($schedule->closing_time)
);
}
if(in_array(true, $isOpen)){
return true;
//return "Pub Opened";
}
return false;
//return "Pub Closed";
}
В моем PubController я бы хотел, чтобы опция «Фильтровать по открытой»pubs "выбрано if($request->openPubs == 1)
, чтобы показывать только открытые пабы isOpen ==true
.
Зная отношения между моделями, как я могу это сделать?
Я ищу что-то вроде этого:
if($request->openPubs == 1)
{
$pubs = $pubs->with('pubSchedules')->where('isOpen' == true);
}
Вы можете мне помочь?
Спасибо большое!