【问题标题】:Laravel 5, Derived table in join clause?Laravel 5,连接子句中的派生表?
【发布时间】: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()

我该如何做到这一点?

【问题讨论】:

    标签: left-join laravel-5 query-builder derived-table


    【解决方案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 函数,而不是表名,这很关键
    猜你喜欢
    • 1970-01-01
    • 2014-12-28
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 2015-07-21
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多