Laravel订购左连接的结果

时间:2014-06-13 13:46:32

标签: laravel sql-order-by left-join eloquent

我试图在Laravels Eloquent查询构建器中复制下面的SQL。

select a.name, b.note from projects a 
left join (select note, project_id from projectnotes order by created_at desc) as b on     (b.project_id = a.id) 
where projectphase_id = 10 group by a.id;

到目前为止,我有:

$projects = Project::leftjoin('projectnotes', function($join)
{
  $join->on('projectnotes.project_id', '=', 'projects.id');
})
->where('projectphase_id', '=', '10')
->select(array('projects.*', 'projectnotes.note as note'))
->groupBy('projects.id')
->get()

除了获取最新的项目注释外,它可以处理所有内容,它只返回输入每个项目的projectnotes表中的第一个项目。

我需要通过' created_at'来获取订单。 desc进入左连接,但我不知道如何实现这一点。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

您的子查询是不必要的,只会使整个事情效率低下。但是,请确保此查询返回相同的结果...

SELECT
    projects.name,
    notes.note
FROM
    projects
LEFT JOIN
    projectnotes notes on projects.id = notes.project_id
WHERE
    projects.projectphase_id = 10
ORDER BY
    notes.created_at desc

如果是,则转换为查询构建器的查询看起来像这样......

$projects = DB::table('projects')
    ->select('projects.name', 'notes.note')
    ->join('projectnotes as notes', 'projects.id', '=', 'notes.project_id', 'left')
    ->where('projects.projectphase_id', '=', '10')
    ->orderBy('notes.created_at', 'desc')
    ->get();