2014-12-11 8 views
0

У меня есть две таблицы users и cars, у cars есть столбец owner, являющийся id пользователя, и мне нужно присоединиться к ним. Оба users и cars имеют столбец, называемый name, и это переопределение. Я хочу сохранить оба, но с разными именами, например car_name и user_name по возвращении.Соедините таблицы с равными столбцами

Вот как я делаю:

$columns = [ 
    DB::raw('cars.name as car_name') 
]; 

$cars = Cars::join('users', 'users.id', '=', 'cars.owner')->get($columns); 

Это работает, если я пытаюсь напечатать car_name, но он по-прежнему отвергая имя, и если я печатаю name он по-прежнему возвращает имя user вместо car ,

Есть ли способ для этого?

+0

И если вы добавляете и псевдоним для имени users.name? Это не работает? – Ragnar

+0

Я не понимаю, что вы имеете в виду. Я понял ошибку в вопросе, я отредактирую. – yayuj

+1

У вас есть псевдоним для car.name DB :: raw ('cars.name as car_name'), я думаю, что вы можете сделать то же самое с users.name DB :: raw ('users.name as user_name'), я не знаю не знаю о красноречивом, но это похоже на запрос SQL – Ragnar

ответ

1

Вы можете использовать select() clause directly in your query .. нет необходимости использовать DB::raw():

$cars = Cars::join('users', 'users.id', '=', 'cars.owner') 
      ->select('*','cars.name as car_name') 
      ->get(); 

Проблема с этим состоит в том, что вы будете в конечном итоге с повторяющейся колонки, как вы спрашиваете БД для всего, плюс поле с новым именем. Это может быть не для вас проблемой, но может быть лучше указать явно поля, которые вы хотите выбрать:

$cars = Cars::join('users', 'users.id', '=', 'cars.owner') 
      ->select('users.name as user_name','cars.name as car_name', 'whatever_else') 
      ->get(); 
1

Я не думаю, что вы можете делать то, что хотите, с помощью - но вы можете с выбором. Это не следует надеяться работать:

$columns = [ 
    '*', 
    'users.name as user_name', 
    'cars.name as car_name' 
]; 

$cars = Cars::join('users', 'users.id', '=', 'cars.owner')->select($columns)->get(); 
Смежные вопросы