Сравнение даты Laravel

Хорошо, поэтому я искал несколько часов для ответа, но не могу найти его. У меня есть множество «заказов» для разных дат. Я получаю все заказы на эту неделю, это не должно быть проблемой, затем я хочу сделать вкладку для каждого дня недели.

То, что я пробовал до сих пор, заключается в следующем:

$dinnerOrders->where('date','>',$date)->where('date','<', $date->endOfDay())->sortBy('created_at'); 

Где $ date:

 $dt = Carbon\Carbon::create()->startOfWeek(); Carbon\Carbon::setTestNow($dt); $date = new Carbon\Carbon('this ' . $day); 

И $ dinnerOrders проходят мимо:

 $dinnerOrders = collect([]); foreach($restaurant->dinners as $dinner) { foreach($dinner->orders as $order) { $dinnerOrders[$order->id] = $order; } } 

Даты кажутся правильными, и это слова в sql. Это не работает, потому что $ dinnerOrders – это коллекция?

То, что я получаю, ничто, т. Е. Пустой набор, несмотря на то, что он работает в терминале mysql.

Так что, возможно, вы спрашиваете, можете ли вы провести сравнение даты в коллекции? Если да, то как?

Как вы заявляете в своем вопросе, $dinnerOrders – это коллекция, а не запрос. Метод where() в Collection работает несколько иначе.

Метод Collections для метода Collections where() не принимает оператора. Это только сравнение равенства. Первым параметром является ключ, второй – это значение, а третий – логическое значение для обозначения свободного сравнения (==) против строгого сравнения (===).

То, что вы ищете, это метод filter() . Вы проходите Закрытие, которое сравнивает дату. Если Closure возвращает true, элемент остается в коллекции. Если он возвращает false, элемент будет удален из коллекции. Что-то вроде этого (просто пример, логика, возможно, потребуется изменить):

 $dinnerOrders = $dinnerOrders->filter(function ($item) use ($date) { return (data_get($item, 'date') > $date) && (data_get($item, 'date') < $date->endOfDay()); }); 

Редактировать сообщение

Основываясь на коде, предоставленном в вашем редактировании, я предполагаю, что в ресторане есть много обедов, а ужин имеет множество заказов. Если это правильно, вы можете установить отношения, в которых говорится, что в ресторане есть много заказов через обеды:

Restaurant.php:

 public function orders() { // restaurant has many orders through dinners $this->hasManyThrough('App\Order', 'App\Dinner'); } 

С помощью этой настройки отношений вы можете получить свою информацию с помощью построителя запросов:

 $dinnerOrders = $restaurant->orders()->where('date','>',$date)->where('date','<', $date->endOfDay())->get();