私はLaravelに多対多の関係を確立したいと思います。 (私は初めてです)多対多多型関係Laravel 5.4
ユーザは多くのプロファイルタイプを持つことができます プロファイルタイプは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
今の問題は、私のプロファイルのモデルコレクションを取得しています。私はプロファイルの種類を取得しますが、私はWebmasterとProjectManagerを取得しません。
質問:私はこのモデルコレクションをこの例でどのように取得するのですか?
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');
}
}
データベース・スキーマ:
多対多多相関係を言う方が良いです。 –
@MortezaRajabiありがとう、私は編集しました。あなたはお尻の上で私を助けることができますか? – HerrWalter
はい、私はあなたの質問に少しでも変更して答えを分かりやすくするために名前をつけます。 –