mysql join选择多列最佳实践

2guxujil  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(440)

我使用的是laravel查询生成器和join语句。 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],
)

klsxnrf1

klsxnrf11#

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

$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();

相关问题