我想在Laravel中建立多对多的多态关系。 (我是新手)
用户可以拥有多种个人资料类型 配置文件类型类似于Admin,Webmaster,ProjectManager。 我为配置文件创建了一个多态关系和数据透视表。
class User {
public function profiles(){
return Profile::where('user_id', $this->id);
}
}
class Webmaster { // and class Admin, Projectmanager
public function profiled(){
return $this->morphToMany(Profile::class, 'profileable');
}
public function saveToUser($user)
{
$profile = new Profile;
$profile->user_id = $user->id;
return $this->profiled()->save($profile);
}
}
现在我可以将模型保存到相应的用户。
$projectManager->saveToUser($user);
$webmaster->saveToUser($user);
它会按预期保存到数据透视表中,并且关系有效。
个人资料表如下所示:
id
user_id
profilable_id
profilable_type
现在问题是检索我的个人资料的模型集合。我得到了Profile类型,但我没有得到网站管理员和ProjectManager。
所以问题是:在这个例子中如何获得这个模型集合?
答案 0 :(得分:1)
您的模型结构将如下:
class Webmaster extends Model
{
public function users()
{
return $this->morphToMany('App\Profile', 'userable');
}
}
class Admin extends Model
{
public function users()
{
return $this->morphToMany('App\Profile', 'userable');
}
}
// and ProjectManager, ....
用户模型:
class User extends Model
{
public function webmasters()
{
return $this->morphedByMany('App\Webmaster', 'userable');
}
public function admins()
{
return $this->morphedByMany('App\Admin', 'userable');
}
}
数据库架构:
webmasters
id - integer
...
admins
id - integer
...
users
id - integer
...
userables
user_id - integer
userable_id - integer
userable_type - string
现在,您可以检索关系:
$webmaster = App\Webmaster::find(1);
// retrieve users of a profile
foreach ($webmaster->users as $user) {
//
}
$user = App\User::find(1);
// retrvieve webmaster profiles of a user
foreach ($user->webmasters as $webmasters) {
//
}
实际上,您的个人资料(网站管理员,管理员,项目管理员)都可以使用。