一对多关联

定义

例如,一个 User 模型可能关联多个 Relation 模型。

为了定义这个关联,我们要在 User 模型中写一个 relation 方法。在 relation 方法内部调用 hasMany 方法并返回其结果:

hasMany 方法的第一个参数是关联模型的类名。

  1. public function relation()
  2. {
  3. return $this->hasMany(Relation::class);
  4. }

模型关联方法允许你向关联加入自定义限制

  1. use EasySwoole\Mysqli\QueryBuilder;
  2. public function settingWhere()
  3. {
  4. return $this->hasMany(Relation::class, function(QueryBuilder $query){
  5. $query->where('u_id', $this->id);
  6. $query->where('status', 1);
  7. return $query;
  8. });
  9. }

ORM 会自动基于关联模型的主键列进行关联。

在这种情况下,会自动使用 Relation id 主键。如果你想覆盖这个约定,可以传递第三个参数和第四个参数给 hasMany 方法:

第三个参数为当前模型的 column, 第四个参数为关联模型的对应 column

  1. public function settingWhere()
  2. {
  3. return $this->hasMany(Relation::class, null, 'id', 'user_id');
  4. }

使用

一旦定义了模型关联,我们就可以使用 ORM 动态属性获得相关的记录。动态属性允许你访问关系方法就像访问模型中定义的属性一样:

如果查询不到则为null 查询得到则为一个数组, 每个数组元素都是模型类的实例 可以继续调用ORM的方式 快速更新 删除等

  1. $userModel = User::create()->get(1);
  2. $hasManyRelation = $userModel->relation; //访问实际是 relation 方法处理后的结果; 返回的是数组 每个数组元素都是 Relation 模型对象
  3. $userId = [];
  4. foreach($res->relation as $relationModel) {
  5. $userId[] = $relationModel->user_id;
  6. }