2016-09-15 7 views
0

私はこのようなデータベースを持っています。Laravel Eloquent多対多と3対1の関係をどのように組み合わせるか

+----------------+ 
| Tables_in_test | 
+----------------+ 
| a_b   | 
| a_c   | 
| as    | 
| bs    | 
| cs    | 
+----------------+ 

bsとcsテーブルは、テーブルとして多対多の関係を持っています。したがって、a_bテーブルとa_cテーブルはピボットテーブルです。

これは、これは、BSテーブル

+----+------+ 
| id | name | 
+----+------+ 
| 1 | B1 | 
+----+------+ 

であり、これは、これが

+------+------+ 
| a_id | b_id | 
+------+------+ 
| 1 | 1 | 
+------+------+ 
012 A_Bピボットテーブルである

+----+------+------+ 
| id | b_id | name | 
+----+------+------+ 
| 1 | 1 | C1 | 
| 2 | 1 | C2 | 
+----+------+------+ 

CSテーブルであるテーブルとして

+----+------+ 
| id | name | 
+----+------+ 
| 1 | A1 | 
| 2 | A2 | 
+----+------+ 

あります

これはa_cピボットテーブルです。

+------+------+ 
| a_id | c_id | 
+------+------+ 
| 1 | 1 | 
| 2 | 2 | 
+------+------+ 

これは私のモデルのasテーブルです。

class A extends Model 
{ 
    protected $table = "as"; 
    public function b(){ 
     return $this->belongsToMany("App\B"); 
    } 
    public function c(){ 
     return $this->belongsToMany("App\C"); 
    } 
} 

そして、これは、BSテーブル用

class B extends Model 
{ 
    protected $table = "bs"; 
    public function c(){ 
     return $this->hasMany("App\C"); 
    } 
} 

Bモデルである私は、テーブルに関連としてCテーブルの値を照会します。

私はこのクエリ

A::where("id",1)->with("b.c")->get(); 

を試みたが、この結果はまた、私に「として」表にA2に関連しているC2の値を与えます。私は "として"テーブルのA1値だけに関連するC1値だけを取得したいです。

どうすればいいですか?

答えて

0

例では、A1はB1に関連し、C2はC2に関連しています。実際にはb.c熱心な積荷を入れているので、それらのBsに関連するBsとCsを積み込んでいます。

試しましたA::where("id",1)->with(["b", "c"])->get();

+0

ありがとうございました。しかし、Cモデルは1対多の関係でBモデルに集めなければならない –

+0

私はそれを簡単に行う方法がないと思う。 –