Три основных стола:
Продукты
Рекламодатели
Места
Две сводные таблицы:
advertisers_locations
products_locations
Отношения:
Продукт принадлежит рекламодателю, и у рекламодателя много мест (куда он может отправлять продукты)
Продукт также может иметь собственный набор местоположений, которые переопределяют местоположения рекламодателя (Некоторые продукты имеют ограничения по доставке)
Что мне нужно сделать, это:
Выбрать все продукты
Проверьте, содержит ли таблица products_locations идентификатор продукта, и присоединитесь к нему.
Если его не существует, присоединитесь к таблице местоположений рекламодателей
Можно ли это сделать в одном запросе и использовать eloquent? Вот мой код - борюсь с условным:
public function scopeWhereShippableToLocation($query)
{
$location_id = session('location_id');
$query->where(function ($q) use ($location_id) {
$q->join('products_locations', 'products_locations.product_id', '=', 'products.id')
->where('products_locations.location_id', '=', $location_id);
});
$query->orWhere(function ($q) use ($location_id) {
$q->join('advertisers_locations', 'advertisers_locations.advertiser_id', '=', 'products.advertiser_id')
->where('advertisers_locations.location_id', '=', $location_id);
});
//dd($q->toSql());
return $query;
}
В настоящее время выдается ошибка MySQL:
Column not found: 1054 Unknown column 'products_locations.location_id' in 'where clause' (SQL: select `products`.*,