是否可以为 Eloquent 关系动态设置模型?
Is it possible to dynamically set model for Eloquent Relationships?
我有 2 个用户角色。在数据库中,我有自己的两个角色的配置文件表(model_profiles
和 client_profiles
)。有没有办法动态设置相关的配置文件模型?我试过这个:
//User model:
public function profile(){
return $this->role == 'model' ? $this->hasOne('App\Models\Model\Profile') : $this->hasOne('App\Models\Client\Profile');
}
但在这种情况下,我不能使用某些 Eloquent 方法,例如 User::with('profile')->whereIn('id', [1,2,3])->get();
,因为在加载用户模型之前,$this->role
是 null
。
有没有什么方法可以使用基于用户角色的 Profile 模型并且不丢失任何 Eloquent 查询方法?
您可以使用多态关系(More Information)
我有 2 个用户角色。在数据库中,我有自己的两个角色的配置文件表(model_profiles
和 client_profiles
)。有没有办法动态设置相关的配置文件模型?我试过这个:
//User model:
public function profile(){
return $this->role == 'model' ? $this->hasOne('App\Models\Model\Profile') : $this->hasOne('App\Models\Client\Profile');
}
但在这种情况下,我不能使用某些 Eloquent 方法,例如 User::with('profile')->whereIn('id', [1,2,3])->get();
,因为在加载用户模型之前,$this->role
是 null
。
有没有什么方法可以使用基于用户角色的 Profile 模型并且不丢失任何 Eloquent 查询方法?
您可以使用多态关系(More Information)