как сделать красноречивую область видимости с помощью whereHas как sql-запроса ниже?
как сделать красноречивую область видимости с помощью whereHas как sql-запроса ниже
Свойство таблицы (id, title, slug, category_id, location_id,image)
Категория таблицы (id, имя, slug)
таблица City ( id, name, slug)
Простой запрос sql, который мне нужен
Select * from property
join category on property.category_id=category.id
join city on property.location_id = city.id
where category.name = $query and city.name=$query
Я хочу сделать красноречивый размах в Property
Модель
1 ответ
Это легко с отношениями.
Основываясь на вашем запросе, допустим, это ваш Property
модель:
class Property extends Model
{
public function category()
{
return $this->belongsTo(Category::class);
}
public function city()
{
return $this->belongsTo(City::class, 'location_id');
}
Теперь я могу написать свой красноречивый запрос следующим образом:
$query = 'Example';
$properties = Property::where('name', $query)
->whereHas('category', function (Builder $builder) use ($query) {
$builder->where('name', $query);
})->get();
Обратите внимание, что Builder
импортируется из Illuminate\Database\Eloquent\Builder
. Вы также можете добавитьwith('category', 'city')
на запрос выше, чтобы загрузить эти отношения.