【问题标题】:Mysql join selects multiple column best practiceMysql join 选择多列最佳实践
【发布时间】:2018-11-19 06:24:42
【问题描述】:

我正在使用 Laravel 查询生成器,我的 join 语句运行良好。

User 表格列:

name|email|phone|gender

School_Abouts 表格列:

courses|boards|contact|location|teachers

目前我进行如下 select 查询:

$school=User::join('school_abouts', 'users.id', '=', 'school_abouts.school_id')
                ->where('users.id',$id)
                ->select('users.name',
                        'users.email',
                        'users.phone',
                        'school_abouts.courses',
                        'school_abouts.boards',
                        'school_abouts.contact',
                        'school_abouts.location',
                        'school_abouts.teachers')
                ->first();

要从 school_about 表中选择列,我必须多次写入表名。但是有没有办法传递一个列数组呢?我试过了,但失败了:

->select('users.name',
   'users.email',
   'users.phone',
   'school_abouts'.[courses,boards,location,contact,teachers],
)

【问题讨论】:

  • 有什么问题?
  • 你确定这和School_Abouts的结构一样吗?因为您的查询中不存在任何列。
  • 列仅用于演示。
  • 您向我们展示了School_Abouts 的结构是有原因的。不是吗?
  • 明白你的意思。现在看看问题。

标签: mysql join laravel-query-builder


【解决方案1】:

您可以安全地从列中删除表名,因为两个表中没有共同的列名,但正如我所见,您正试图从两个表中获取几乎所有列,这可以使用* 进行简化:

$school = User::join('school_abouts', 'users.id', '=', 'school_abouts.school_id')
                ->where('users.id', $id)
                ->select('users.*', 'school_abouts.*')
                ->first();

但是,如果您想获取某些列并且它们的名称可能会产生歧义,那么必须在列名前加上表名。为了使其更短,您可以使用别名:

$school = User::join('school_abouts AS sa', 'users.id', '=', 'sa.school_id')
                ->where('users.id', $id)
                ->select('users.name',
                        'sa.courses',
                        'sa.boards',
                        'sa.contact',
                        'sa.location')
                ->first(); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    相关资源
    最近更新 更多