Laravel 5.1: сочетания дескрипторов с одинаковыми именами столбцов

Я пытаюсь извлечь из базы данных следующие вещи:

  • имя пользователя
  • имя пользователя аватара
  • Пользовательский аватар_файл
  • Полный диалог_сообщений

со следующим запросом:

static public function getConversation($id) { $conversation = DB::table('conversation_messages') ->where('belongsTo', $id) ->join('users', 'conversation_messages.sender', '=', 'users.id') ->join('user_avatars', 'conversation_messages.sender', '=', 'user_avatars.id') ->select('users.name', 'conversation_messages.*', 'user_avatars.name', 'user_avatars.filetype') ->get(); return $conversation; } 

Пока это работает, но имя столбца аватара – это name , как имя столбца из таблицы « users ». Поэтому, если я использую этот запрос, чтобы получить результат через $conversation->name avatar.name $conversation->name , avatar.name перезаписывает имя users.name

Есть ли способ переименовать вывод запроса, как функция mysql «as» в laravel 5.1?

Например:

 $conversation->avatarName $conversation->userName 

Meh хорошо .. я нашел простое решение здесь

 ->select('users.name as userName', 'conversation_messages.*', 'user_avatars.name as avatarName', 'user_avatars.filetype') 

Как вы можете упомянуть, я добавил запрошенную «as-Feature» рядом с таблицей. ColumnName

Взгляните на этот пример, пытаясь объединить три стола сотрудников, клиентов и заказов (сводная таблица).

  $bookings = \DB::table('bookings') ->join('staffs', 'staffs.id' , '=', 'bookings.staff_id') ->join('customers', 'customers.id' , '=', 'bookings.customer_id') ->select('bookings.id', 'bookings.start_time', 'bookings.end_time', 'bookings.service', 'staffs.name as Staff-Name', 'customers.name as Customer-Name') ->orderBy('customers.name', 'desc') ->get(); return view('booking.index') ->with('bookings', $bookings); 

Да, просто переименуйте столбец на обе таблицы, и он должен работать. Также, что вы можете сделать, переименуйте столбец user.name на что-нибудь, также переименуйте столбец отправителя talk_messages в id и выполните естественное соединение.

У меня была следующая проблема: упрощенный пример:

 $result = Donation::join('user', 'user.id', '=', 'donation.user_id')->where('user.email', 'hello@papabello.com')->first(); 

$result – это сборник моделей Donation . НО ОСТОРОЖНО:

обе таблицы имеют столбец «created_at». Теперь, когда created_at отображается при выполнении $result->created_at ? я не знаю. Кажется, что красноречивый делает неявный select * при выполнении объединения, возвращая модели Donation но с дополнительными атрибутами. created_at кажется случайным. Так что я действительно хотел, это возвращение всех моделей Donation пользователя с помощью электронной почты hello@papabello.com

Решение таково:

 $result = Donation::select('donation.*')->join('user', 'user.id', '=', 'donation.user_id')->where('user.email', 'hello@papabello.com')->first();