如何在laravel eloquent中为左连接表起别名

Posted

技术标签:

【中文标题】如何在laravel eloquent中为左连接表起别名【英文标题】:How to alias a left joined table in laravel eloquent 【发布时间】:2018-09-04 14:19:44 【问题描述】:

基本上我有一种情况,我在 laravel 查询中创建了两个左外连接,现在我想选择两列并为它们放置一个别名,如果一列为空,则使用其他列的值作为新的别名列。 SQL中的NVL之类的东西。有什么建议吗?

我尝试了类似 ...->select('one or other as newName');但它不会工作。

编辑:我有一个表格,用于存放我与用户、news_groups 和 magazine_groups 一起加入的文章。有 news_group 的文章不会有 magazine_group。我想在使用别名的选择中将它们一起显示在一个连接列中。

DB::table('articles')
        ->leftJoin('articles', 'articles.id', '=', 'articles.user_id')
        ->leftJoin('news_groups', 'news_groups.id', '=', 'articles.news_group_id')
        ->leftJoin('magazine_groups', 'magazine_groups.id', '=', 'articles.magazine_groups_id')
        ->select('articles.id', 'type', 'title', 'articles.published_at',
            'users.first_name','users.last_name', 'news_groups.name or magazine_groups.name as group_name')
        ->groupBy('articles.id');

【问题讨论】:

一个完整的代码示例将不胜感激。你能用原始的 sql 代替 ORM 吗? 要改善您的 SO 体验,请阅读如何询问 On Topic question、Question Check list 和 the perfect question 以及如何创建 Minimal, Complete and Verifiable Example 和 take the tour 像大多数关于 SO 的问题一样,如果你展示你的代码,你会得到社区更好更快的响应。 对不起,在这里。 【参考方案1】:

您将需要使用Raw Expression:

DB::table('articles')
        ->leftJoin('articles', 'articles.id', '=', 'articles.user_id')
        ->leftJoin('news_groups', 'news_groups.id', '=', 'articles.news_group_id')
        ->leftJoin('magazine_groups', 'magazine_groups.id', '=', 'articles.magazine_groups_id')
        ->select(DB::raw('articles.id, type, title, articles.published_at, users.first_name, users.last_name, COALESCE(news_groups.name, magazine_groups.name) as group_name'))
        ->groupBy('articles.id');

【讨论】:

【参考方案2】:

看看https://laravel.com/docs/5.6/queries#raw-expressions原始表达式。

你可以试试这样的:

->select(DB::RAW('IFNULL(news_groups.name,magazine_groups.name) AS groupname,articles.id..other selects'))

【讨论】:

以上是关于如何在laravel eloquent中为左连接表起别名的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel Eloquent 查询(或使用查询生成器)中为表起别名?

Laravel Eloquent 在与其他表连接后从关系中选择字段

在 Laravel Eloquent 中连接表值

使用 eloquent laravel 获取连接表数据

在 Laravel 中为现有的 InnoDB 关系设置 Eloquent 关系

如何通过laravel创建数据透视表