わかりましたので、私は答えのために何時間も探していましたが、答えを見つけることができないようです。すべて異なる日付の「注文」の配列があります。今週のすべての注文を取得しましたが、これは問題にはなりません。それから、曜日ごとにタブを表示します。
これまでに試したことはこれです:
$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
_はクエリではなくコレクションです。 Collection
のwhere()
メソッドの動作は少し異なります。
コレクションの場合、where()
メソッドは演算子を受け入れません。等価比較のみを行います。最初のパラメーターはキー、2番目のパラメーターは値、3番目のパラメーターはブール値であり、緩やかな比較(==)と厳密な比較(===)のフラグを立てます。
あなたが探しているのはfilter()
メソッドです。日付の比較を行うクロージャーを渡します。クロージャーがtrueを返す場合、アイテムはコレクションに残ります。 falseを返す場合、アイテムはコレクションから削除されます。このようなもの(単なる例、ロジックを微調整する必要があるかもしれません):
_$dinnerOrders = $dinnerOrders->filter(function ($item) use ($date) {
return (data_get($item, 'date') > $date) && (data_get($item, 'date') < $date->endOfDay());
});
_
編集で提供されたコードに基づいて、レストランのhasManyディナーとディナーのhasMany注文が推測されます。これが正しければ、レストランにディナーを介して多くの注文があることを示す関係を設定できます。
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();
_