как сделать красноречивую область видимости с помощью 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') на запрос выше, чтобы загрузить эти отношения.

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