首页 > 解决方案 > 如何使用下面的 whereHas like sql 查询创建雄辩的范围?

问题描述

如何使用下面的 whereHas like sql 查询来创建雄辩的范围

表属性(id、title、slug、category_id、location_id、image)

表类别(id,名称,slug)

表城市(id,名称,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模型中做出雄辩的范围

标签: mysqllaraveleloquenteloquent-relationshiplaravel-eloquent-resource

解决方案


这在人际关系中很容易。

根据您的查询,假设这是您的Property模型:

class Property extends Model
{
    public function category()
    {
        return $this->belongsTo(Category::class);
    }

    public function city()
    {
        return $this->belongsTo(City::class, 'location_id');
    }

现在我可以像这样编写我的 Eloquent 查询:

$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')到上面的查询中以预先加载这些关系。


推荐阅读