Laravel - 在同一个模型上有 hasMany() 和 hasOne() 关系?
Laravel - Having a hasMany() as well as a hasOne() relationship on the same model?
我有一个 Company
模型,我想在其中定义与 User
模型的两个关系:
public function users(){
return $this->hasMany('App\User');
}
public function administrator(){
return $this->hasOne('App\User', 'superuserid');
}
我的companies
table数据库中有一个superuserid
字段,它是users
id
的外键table。
我只想知道这到底是不是一个好策略,甚至可能吗?
是的,这是一个很好的策略,而且是可能的。
在您的模型中,您可以根据模型的需要定义尽可能多的关系。这些关系可以是不同的类型(hasOne、hasMany、belongsTo 等)。
在你的例子中,由于公司有多个用户并且属于一个超级用户,我们有两种不同的关系,所以,显然,我们需要在模型中创建两种方法来表示这两种关系。
再比如:你和你爸爸的关系。假设有一个用户模型的实现:
class User extends Model
{
public function children()
{
return $this->hasMany(User::class, 'id_parent');
}
public function dad()
{
return $this->belongsTo(User::class, 'id_parent')->where('gender', 'male');
}
}
这里一个用户可以有很多children但只属于一个爸爸。
我有一个 Company
模型,我想在其中定义与 User
模型的两个关系:
public function users(){
return $this->hasMany('App\User');
}
public function administrator(){
return $this->hasOne('App\User', 'superuserid');
}
我的companies
table数据库中有一个superuserid
字段,它是users
id
的外键table。
我只想知道这到底是不是一个好策略,甚至可能吗?
是的,这是一个很好的策略,而且是可能的。
在您的模型中,您可以根据模型的需要定义尽可能多的关系。这些关系可以是不同的类型(hasOne、hasMany、belongsTo 等)。
在你的例子中,由于公司有多个用户并且属于一个超级用户,我们有两种不同的关系,所以,显然,我们需要在模型中创建两种方法来表示这两种关系。
再比如:你和你爸爸的关系。假设有一个用户模型的实现:
class User extends Model
{
public function children()
{
return $this->hasMany(User::class, 'id_parent');
}
public function dad()
{
return $this->belongsTo(User::class, 'id_parent')->where('gender', 'male');
}
}
这里一个用户可以有很多children但只属于一个爸爸。