2017-02-20 6 views
0

Laravelでテーブルを結合するのに実際の問題があります。Laravel 5複数のテーブルを結合する

私は2つのテーブルを結合することができますが、すぐに私は第三に参加しようとして、私は、クエリを実行するために、私のメインモデルにこれを追加しました

class Main extends Model 
{ 
    protected $table = 'main'; 
    protected $primaryKey = 'id'; 

    public function test() 
    { 
     return $this->hasOne('App\Models\Test', 'id', 'id'); 
    } 

    public function row() 
    { 
     return $this->hasOne('App\Models\Row', 'id', 'id'); 
    } 
} 

class Test extends Model 
{ 
    protected $table = 'test'; 
    protected $primaryKey = 'id'; 

    public function main() 
    { 
     return $this->belongsTo('App\Models\Main', 'id', 'id'); 
    } 

    public function rows() 
    { 
     return $this->hasMany('App\Models\Row', 'id', 'id'); 
    } 
} 

class Row extends Model 
{ 
    protected $table = 'row'; 
    protected $primaryKey = 'id'; 

    public function main() 
    { 
     return $this->belongsTo('App\Models\Main', 'id', 'id'); 
    } 

    public function rows() 
    { 
     return $this->belongsTo('App\Models\Test', 'id', 'id'); 
    } 
} 

はデータを取得していません。これで2つのテーブルが出力されます

public function scopeGetPart($query, somefield) 
{ 
    return $query->with('test.main') 
     ->where('somefield', somefield); 
} 

これはphpMyAdminで実行すると機能します。あなたが$main->with('test.rows')を試してみました私は、あなたのコードを実行せずにこのLaravelの方法

SELECT * FROM 
    main 
     INNER JOIN test ON 
      main.id = test.id 
     INNER JOIN row ON 
      main.id = row.id 
       AND main.my_field = row.my_field 
WHERE somefield = 103288 

答えて

0

書きたいの?これは、テストの行を持つメインインスタンスのテストをフェッチする必要があります。

+0

を望んでどのようにすべての私の他のクエリを働き、完璧に動作接合する代わりに、これを使用? – AdRock

0

私は生のSQLをエコーについて、私が実行していますかを見ることができますどのような、それが問題を引き起こしていたとして雄弁にあきらめたと私は

DB::table('main') 
    ->join('test', 'main.id', '=', 'test.id') 
    ->join('row', function ($join) { 
     $join->on('main.id', '=', 'row.id') 
       ->whereRaw('main.my_field= row.my_field'); 
     }) 
    ->where('somefield', '103288'); 
関連する問題