Фильтр по первому внешнему ключу
Я создаю сайт для сравнения цен на товары в разных магазинах. Я создал базу данных с этими двумя таблицами.
+---------+ +------------+
| Product | | Price |
+---------+ +------------+
| id | | id |
| name | | product_id |
+---------+ | price |
| date |
+------------+
Теперь я хотел бы иметь возможность получить все продукты, где последний price.date
раньше определенной даты.
Я пытался использовать следующий код, но безуспешно.
Product::with(['prices' => function($q){
$q->first()->where('date', '<', Carbon::yesterday());
}])->get()->prices();
Может кто-нибудь помочь мне с этой проблемой?
Заранее спасибо:)
1 ответ
Решение
With()
только для быстрой загрузки записей.
Вам нужно использовать whereHas
:
Product::whereHas('price',function($q) {
return $q->where('date', '<', Carbon::yesterday());
})->whereHas('price',function($q) {
return $q->where('date','>=',Carbon::yesterday());
},'=',0)->get();
Это вернет все продукты where
Это has
цены которых date
является less
чем Carbon::yesterday()