Mysql join выбирает лучшую практику из нескольких столбцов - PullRequest
0 голосов
/ 09 июня 2018

Я использую 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],
)

1 Ответ

0 голосов
/ 09 июня 2018

Вы можете безопасно удалить имя таблицы из столбцов, поскольку в обеих таблицах нет общего имени столбца, но, как я вижу, вы пытаетесь получить почти все столбцы из обеих таблиц, что можно упростить с помощью *:

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