如何在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 在与其他表连接后从关系中选择字段