J'essaie d'extraire les éléments suivants de la base de données:
avec la requête suivante:
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;
}
Cela fonctionne bien jusqu'à présent, mais le nom de colonne de l'avatar est 'name
', tout comme le nom de colonne de la table 'users
'. Donc, si j'utilise cette requête le pour obtenir la sortie via $conversation->name
, le avatar.name
remplace le users.name
Existe-t-il un moyen de renommer la sortie de la requête, telle que la fonction mysql "as" de laravel 5.1?
Par exemple:
$conversation->avatarName
$conversation->userName
Meh okay .. j'ai trouvé une solution simple ici
->select('users.name as userName', 'conversation_messages.*', 'user_avatars.name as avatarName', 'user_avatars.filetype')
Comme vous pouvez le mentionner, j'ai ajouté le "as-Feature" demandé à côté de la table.columnName
Jetez un coup d'œil à cet exemple de tentative de joindre trois membres du personnel, clients et réservations (tableau croisé dynamique).
$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);
J'ai eu le problème suivant, exemple simplifié:
$result = Donation::join('user', 'user.id', '=', 'donation.user_id')->where('user.email', '[email protected]')->first();
$result
est une collection de Donation
modèles. MAIS ATTENTION:
les deux tables ont une colonne 'created_at'. Maintenant quel created_at
est affiché en faisant $result->created_at
? Je ne sais pas. Il semble qu'éloquent utilise un select *
implicite lors d'une jointure et renvoie des modèles Donation
mais avec des attributs supplémentaires. created_at
semble aléatoire. Donc, ce que je voulais vraiment, c’est un retour de tous les modèles Donation
de l’utilisateur avec la messagerie [email protected]
la solution est la suivante:
$result = Donation::select('donation.*')->join('user', 'user.id', '=', 'donation.user_id')->where('user.email', '[email protected]')->first();
Ouais, il suffit de renommer la colonne de l'une des tables et tout devrait fonctionner .. Vous pouvez également renommer la colonne user.name, renommer la colonne d'expéditeur de conversation_messages en id et effectuer une jointure naturelle.