Mysql join选择多列最佳实践

时间:2018-06-09 10:40:30

标签: mysql join laravel-query-builder

我使用 Laravel查询生成器,我的加入声明完美运行。

User 表格列:

name|email|phone|gender

School_Abouts 表格列:

courses|boards|contact|location|teachers

目前我按选择查询,如下所示:

$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],
)

1 个答案:

答案 0 :(得分: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();