Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql连接选择多列最佳实践_Mysql_Join_Laravel Query Builder - Fatal编程技术网

Mysql连接选择多列最佳实践

Mysql连接选择多列最佳实践,mysql,join,laravel-query-builder,Mysql,Join,Laravel Query Builder,我使用的是Laravel查询生成器,我的join语句工作得非常好 用户表格列: name|email|phone|gender courses|boards|contact|location|teachers 学校简介表格列: name|email|phone|gender courses|boards|contact|location|teachers 目前,我按如下方式进行选择查询: $school=User::join('school_abouts', 'users.id', '=

我使用的是Laravel查询生成器,我的join语句工作得非常好

用户
表格列:

name|email|phone|gender
courses|boards|contact|location|teachers
学校简介
表格列:

name|email|phone|gender
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\u中选择关于
表的列,我必须多次写入表名。但是有没有办法传递一个列数组呢?我试过了,但失败了:

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

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

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

问题是什么?你确定这与学校的结构相同吗?因为您的查询中没有任何列。这些列仅用于演示。您向我们展示了学校的结构是有原因的。不是吗?明白你的意思了。现在看看这个问题。