Соединение Mysql выбирает передовую практику с несколькими столбцами

Я использую Laravel Query Builder, и мой оператор соединения работает отлично.

Столбцы таблицы 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],
)

person Ashutosh Sharma    schedule 09.06.2018    source источник
comment
Какой вопрос?   -  person revo    schedule 09.06.2018
comment
Вы уверены, что это та же структура, что и у School_Abouts? Поскольку ни один из столбцов в вашем запросе не существует.   -  person revo    schedule 09.06.2018
comment
Колонки предназначены только для демонстрации.   -  person Ashutosh Sharma    schedule 09.06.2018
comment
Вы показали нам структуру School_Abouts не просто так. Не так ли?   -  person revo    schedule 09.06.2018
comment
Получил вашу точку зрения. теперь взгляните на вопрос.   -  person Ashutosh Sharma    schedule 09.06.2018
comment
Фактически, вы можете безопасно удалить предыдущее имя таблицы из столбца. Так как они уникальны в каждой таблице.   -  person revo    schedule 09.06.2018
comment
Это сработало для меня. Что, если columns не уникальны.   -  person Ashutosh Sharma    schedule 09.06.2018


Ответы (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(); 
person revo    schedule 09.06.2018