2017-08-03 246 views
1

如果我有类似以下的内容,我该如何添加左连接到“with(new Model)”部分?Laravel Eloquent left join in where where查询

Model::whereIn('name', function ($query) use ($link) { 
    $query->select('name') 
     ->from(with(new Model)->getTable()) // would like to do a leftJoin here 
     ->where('link', $link); 
})->get(); 

我已经试过

Model::whereIn('name', function ($query) use ($link) { 
    $query->select('name') 
     ->from(with(new Model)->leftJoin('tableZ', Model.col1, '=', tableZ.col1)->getTable()) 
     ->where('link', $link); 
})->get(); 

我也试过:

Model::whereIn('name', function ($query) use ($link) { 
    $query->select('name') 
     ->from(with(new Model)->getTable()) 
     ->leftJoin('tableZ', Model.col1, '=', tableZ.col1) 
     ->where('link', $link); 
})->get(); 

不完全知道我应该如何去这样做。

+0

也许创建所需的原始SQL并发布。安装[debugbar](https://github.com/barryvdh/laravel-debugbar)并调试你想要的SQL查询。玩的开心! – Kyslik

+0

该调试栏看起来非常漂亮。我会检查出来的。 – rotaercz

+0

它应该首先安装...干杯! – Kyslik

回答

0

link 1个字段在tableZ?如果是的话

->where('table.link', $link) 

可能是你想要什么。我会在你的第二个例子中使用它;我不认为将leftJoin()直接应用于with函数可以起作用,因为()似乎返回模型对象而不是查询。

0

也许你应该这样做。

DB::table("table_A") 
    ->leftJoin("table_B","table_A.id,"=","table_B.A_id) 
    ->select(['table_A.name as name','xxxxxx']); 
0

我想你可以尝试,这可能是解决您的问题:

Model::whereIn('name', function ($query) use ($link) { 
    $query->select('name') 
     ->from(with(new Model)->getTable()) 
     ->leftJoin('tableZ', Model.col1, '=', tableZ.col1) 
     ->where('tableZ.link', $link); 
})->get(); 

希望这对你的工作!