join - Laravel Eloquent 地从联接表中选择了最新的行

标签 join laravel eloquent

我有两个表Project和Projectnote

项目和项目说明之间存在一对多的关系。

我希望能够列出我的项目,并根据created_at日期选择最新的项目注释。

这在 Eloquent 中可以做到吗,我不知道。

谢谢你的帮助!

编辑:到目前为止,我有一个连接两个表的基本查询(如下)。但是,这只会选择存在注释的项目,而我会得到多行,其中每个项目有多个注释。

$projects = Project::join('projectnotes', 'projectnotes.project_id', '=', 'projects.id')
->select(array('projects.*', 'projectnotes.note as note'))
->get();

最佳答案

您可以使用最新值加入表格:

->join('t1', function($join) {
        $join->on('t1.t2_id', '=', 't2.id')
             ->on('t1.id', '=', DB::raw("(select max(id) from t1 WHERE t1.t2_id = t2.id)"));

如果您还想在t1没有值的地方加入,请使用leftJoin。您的情况如下所示:
$projects = Project::leftJoin('projectnotes', function($join) { 
        $join->on('projectnotes.project_id', '=', 'projects.id')
             ->on('projectnotes.id', '=', DB::raw("(SELECT max(id) from projectnotes WHERE projectnotes.project_id = projects.id)")); 
        })
        ->select(array('projects.*', 'projectnotes.note as note'))

关于join - Laravel Eloquent 地从联接表中选择了最新的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24185944/

相关文章:

java - JPA Left Join IS NULL 条件不起作用

php - 如何在 laravel 上将字符串从 jquery 翻译为blade

mysql - Eloquent sum 参数 db 问题

php - Laravel 获取相关模型的相关模型

php - Laravel:使用 foreach 时获取 session ID 奇怪地截断

用于连接两个表并提取重复条目的 SQL 查询

mysql - 改进对多个表进行计数和连接的查询

MySQL:从交叉连接行返回总记录数?

mysql - Laravel 5.1 中的外键 - 无关系

mysql - Laravel orderby 与 groupby sql