2015-11-03 2 views
9

Я пытаюсь принести следующие вещи из базы данных:Laravel 5,1: рукоятка соединяется с теми же именами столбцов

  • имя пользователя
  • пользователь avatar_name
  • пользователь avatar_filetype
  • полный conversation_messages

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

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 перезаписывает users.name

Есть ли способ, чтобы переименовать выходные данные запроса, как в MySQL «как» особенность в Laravel 5.1?

Например:

$conversation->avatarName 

$conversation->userName 

ответ

16

Мех хорошо .. я нашел простое решение here

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

Как вы можете отметить, что я добавил запрашиваемая "как-Feature" рядом с table.columnName

0

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

+0

Да, это была моя первая мысль тоже. Но подумайте, что последовательное именование - хорошая функция в каждой базе данных. Проверьте мой собственный ответ: я нашел довольно приятное решение. :) –

2

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

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

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

$result = Donation::join('user', 'user.id', '=', 'donation.user_id')->where('user.email', '[email protected]')->first(); 

$result представляет собой набор Donation моделей. НО ОГРАЖДЕНА:

обе таблицы имеют столбец 'created_at'. Теперь, когда created_at отображается при выполнении $result->created_at? я не знаю. Кажется, что красноречивый делает неявный select * при выполнении соединения, возвращая модели Donation, но с дополнительными атрибутами. created_at похоже случайный. Так что я действительно хотел, это возвращение всех Donation моделей пользователя с электронной почтой [email protected]

решение заключается в следующем:

$result = Donation::select('donation.*')->join('user', 'user.id', '=', 'donation.user_id')->where('user.email', '[email protected]')->first(); 
Смежные вопросы