Фильтр по первому внешнему ключу

Я создаю сайт для сравнения цен на товары в разных магазинах. Я создал базу данных с этими двумя таблицами.

+---------+     +------------+
| 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()

Официальная документация

Другие вопросы по тегам