Я пытаюсь извлечь из базы данных следующие вещи:
со следующим запросом:
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();