Laravel – 被关联模型的筛选
Laravel 中遇到这种场景: user 表与 meta 表是一对多的关系,结构如下:
1 2 3 4 |
user 表 # 名字 类型 排序规则 属性 空 默认 注释 额外 1 id主键 int(10) UNSIGNED 否 无 AUTO_INCREMENT 2 name varchar(255) utf8mb4_unicode_ci 否 无 |
1 2 3 4 5 6 |
meta 表 # 名字 类型 排序规则 属性 空 默认 注释 额外 1 id主键 int(10) UNSIGNED 否 无 AUTO_INCREMENT 2 user_id索引 int(10) UNSIGNED 否 无 3 meta_key索引 varchar(255) utf8mb4_unicode_ci 否 无 4 meta_value varchar(255) utf8mb4_unicode_ci 否 无 |
user.id 与 meta.user_id 关联。
当查询时需要对 meta 表的 meta_value 的值做筛选。
整个操作如下:
1 2 3 4 5 |
// model User public function metas() { return $this->hasMany('App\Models\Meta', 'user_id')->select('user_id', 'meta_key', 'meta_value'); } |
1 2 3 4 |
// controller User::whereHas('metas', function ($query) { $query->where(['meta_key'=>'birthyear', 'meta_value'=>'2001']); }); |
Done。