Laravel 5,连接子句中的派生表?

Posted

技术标签:

【中文标题】Laravel 5,连接子句中的派生表?【英文标题】:Laravel 5, Derived table in join clause? 【发布时间】:2015-07-28 21:37:28 【问题描述】:

我有这个问题:

SELECT * FROM blog
LEFT JOIN (
    SELECT blog_id, AVG(value) as blog_rating FROM blog_ratings
    GROUP BY (blog_id)
) T ON T.blog_id = blog.id;

我不知道如何用 Eloquent 写这个。

例如:

Blog::select("*")->leftJoin( /* Here goes derived table */ )->get()

我该如何做到这一点?

【问题讨论】:

【参考方案1】:

我个人只是使​​用流畅的查询生成器,试试这个,看看效果如何:

DB::table('blog')
  ->select('*')
  ->leftJoin(DB::raw('(SELECT blog_id, AVG(value) as blog_rating FROM blog_ratings
    GROUP BY (blog_id)
    ) as T'), function ($join) 
        $join->on ( 'T.blog_id', '=', 'blog.id' );
    )
  ->get();

您可以随时将->get() 替换为->toSql() 以转储查询并在发现任何错误时进行调整。

【讨论】:

因为我不能使用 DB::table 因为它不会给我模型(我有表示数据所需的关系)我想出了这个Blog::leftJoin(DB::raw('(SELECT blog_id, AVG(value) as blog_rating FROM blog_ratings GROUP BY (blog_id)) as T'), function ($join) $join->on ( 'T.blog_id', '=', 'blog.id' );)->get(); 了解到您可以将原始派生表 sql 作为第一个参数传递给 *join 函数,而不是表名,这很关键

以上是关于Laravel 5,连接子句中的派生表?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 子查询 派生表子查询错误

4 个连接 + 3 个 where 子句的查询构建器正确语法(Laravel 5.7)

Laravel - 从一个表中获取不存在于另一个表中的记录,并附加了 where 子句

sqlserver 创建视图失败,原因:ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效

ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效

Laravel 5 如何在 select 子句中使用 Carbon 转换日期相关列?