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();

浙公网安备 33010602011771号