Laravel 5加入多个表格

时间:2017-02-20 17:09:16

标签: sql join laravel-5

我在Laravel中加入桌子时遇到了真正的问题。

我可以加入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');
    }
}

我已将此添加到我的Main模型中以运行查询。这将输出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

2 个答案:

答案 0 :(得分:0)

如果不运行代码,您是否尝试过$main->with('test.rows')?这应该使用测试的行来获取主实例的测试。

答案 1 :(得分:0)

我放弃了Eloquent,因为它引起了问题并且使用了它而不是我想要的

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