2016-04-25 17 views
0

は、次の表の構造を考えてみましょう。私は自分のユーザーモデルとlangとregionモデルの関係を確立したいと思っています。 lang_regionテーブルは、使用可能な言語と地域の組み合わせを定義し、各ユーザーを有効な組み合わせにリンクできます。雄弁モデルの関係は

私はLaravelのドキュメントをいくつか読んで適切な関係タイプを探していますが、Many to ManyとMany Many Throughの関係は近いと思われますが、user.idは中間テーブルでは使用されていないようです私は運が悪いかもしれません。

アマチュアの質問に申し訳ありませんが、一般的にLaravelとORMに慣れてきました。

+0

あなたは、ピボットテーブルを使用する必要があります。それから、Eloquentはうまく動作します – Mojtaba

+0

これは私の初期の考えですが、ピボットテーブルとの間の寛容の関係はピボットテーブルに存在するIDとそのテーブルでピボット回転するテーブルに依存しているようです。 lang_regionテーブルはlang_idとregion_idを含むピボットテーブルですが、私が解決しようとしている問題は、ユーザーテーブルにlang_region行の外部キーがあり、指定されたlang_regionを使ってlangにアクセスしたいということですユーザー。 – JamieA

+0

あなたのデータベース構造は考えていますか? lang_regionテーブルがその部分である理由を説明します。参照する必要がありますか? –

答えて

0

私は、lang_regionテーブルをピボットテーブルとそれ自身のモデルを持つ通常のテーブルの両方として使用します。

class LangRegion extends model 
{ 
    protected $table = 'lang_region'; 

    public function language() 
    { 
     return $this->belongsTo(Language::class, 'lang_id'); 
    } 

    public function region() 
    { 
     return $this->belongsTo(Region::class); 
    } 

    public function users() 
    { 
     return $this->hasMany(User::class); 
    } 
} 

class User extends model 
{ 
    protected $table = 'user'; 

    public function langRegion() 
    { 
     return $this->belongsTo(LangRegion::class); 
    } 
} 

class Language extends model 
{ 
    protected $table = 'lang'; 

    public function regions() 
    { 
     $this->belongsToMany(Region::class, 'lang_region', 'lang_id', 'region_id'); 
    } 

    public function users() 
    { 
     $this->hasManyThrough(User::class, LangRegion::class, 'lang_id', 'lang_region_id'); 
    } 
} 


class Region extends model 
{ 
    protected $table = 'region'; 

    public function languages() 
    { 
     $this->belongsToMany(Language::class, 'lang_region', 'region_id', 'lang_id'); 
    } 

    public function users() 
    { 
     $this->hasManyThrough(User::class, LangRegion::class, 'region_id', 'lang_region_id'); 
    } 
} 
0

私はあなたが正しく何をしたい理解していれば:

class User extends Model { 
    private function lang_region() { 
     return $this->hasOne(LangRegion::class) 
    } 

    public function lang() { 
     return $this->lang_region()->lang(); 
    } 

    public function region() { 
     return $this->lang_region()->region(); 
    } 
} 

class LangRegion extends Model { 
    public function lang() { 
     return $this->belongsTo(Lang::class); 
    } 

    public function region() { 
     return $this->belongsTo(Region::class); 
    } 
}