2017-02-20 7 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. Я хочу написать этого 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

без запуска кода, вы пробовали $main->with('test.rows')? Это должно получить тесты основного экземпляра с строками теста.

+0

Все мои другие запросы и соединения работают отлично, как насчет вторя сырой SQL, так что я могу видеть, что работать ? – AdRock

0

я сдался с красноречив, как это вызывает проблемы и использовать это вместо того, который работает так, как я хотел

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');