Laravel with 多表查询条件筛选

例如以下表:

  • 菜品表: foods
字段 说明
id 主键
title 菜品名称
..... 省略
  • 菜品规格表: foods_specs
字段 说明
id 主键
title 规格名称
foods_id 菜品表ID
price 价格
..... 省略
  • 菜品模型: FoodsModel
class FoodsModel extends Model
{
  
     // 省略
     /**
     * 规格
     * @return HasMany
     */
    public function specs()
    {
        return $this->hasMany(\App\Model\FoodsSpecsModel::class, 'foods_id', 'id');
    }

   // 省略
}
  • 菜品规格模型: FoodsSpecsModel
class FoodsSpecsModel extends Model
{
    protected $table = 'foods_specs';

    protected function foods()
    {
        return $this->belongsTo('App\Model\FoodsModel', 'foods_id', 'id');
    }
}
  • 根据菜品价格区间查询筛选菜品:
FoodsModel::with(['specs' => function($query){
            $query->select(['title', 'price']);
        }])
        ->whereHas('specs', function ($query) use ($params){
            // price_from,price_end对应价格区间, 可选参数
            if (isset($params['price_from']) && isset($params['price_end'])){
                $query->whereBetween('price', [$params['price_from'], $params['price_end']]);
            }
        })->select('title')->get();

你可能感兴趣的:(Laravel)