Ich versuche, folgende Dinge aus der Datenbank abzurufen:
- Nutzername
- Benutzer-avatar_name
- Benutzeravatar_Dateityp
- vollständige Konversationsnachrichten
mit folgender Abfrage:
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;
}
Es funktioniert soweit gut, aber der Spaltenname des Avatars ist ‘name
‘ wie der Spaltenname aus dem ‘users
‘ Tisch. Wenn ich also diese Abfrage verwende, um die Ausgabe über zu erhalten $conversation->name
das avatar.name
überschreibt die users.name
Gibt es eine Möglichkeit, die Abfrageausgabe wie die mysql-Funktion “as” bei Laravel 5.1 umzubenennen?
Zum Beispiel:
$conversation->avatarName
$conversation->userName
Meh okay.. Ich habe eine einfache Lösung gefunden hier
->select('users.name as userName', 'conversation_messages.*', 'user_avatars.name as avatarName', 'user_avatars.filetype')
Wie Sie erwähnen können, habe ich das angeforderte “as-Feature” neben dem table.columnName hinzugefügt
Sehen Sie sich dieses Beispiel an, in dem versucht wird, drei Tabellen mit Mitarbeitern, Kunden und Buchungen (Pivot-Tabelle) zusammenzuführen.
$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);
Ich hatte folgendes Problem, vereinfachtes Beispiel:
$result = Donation::join('user', 'user.id', '=', 'donation.user_id')->where('user.email', '[email protected]')->first();
$result
ist eine Sammlung von Donation
Modelle. ABER VORSICHT:
beide Tabellen haben eine ‘created_at’-Spalte. Nun welche created_at
wird dabei angezeigt $result->created_at
? ich weiß nicht. Es scheint, dass eloquent etwas implizites tut select *
beim Verbinden, Zurückgeben von Modellen Donation
aber mit zusätzlichen Attributen. created_at
scheint zufällig. Also, was ich wirklich wollte, ist eine Rückkehr von allem Donation
Modelle des Benutzers mit E-Mail [email protected]
Lösung ist diese:
$result = Donation::select('donation.*')->join('user', 'user.id', '=', 'donation.user_id')->where('user.email', '[email protected]')->first();
Ja, benennen Sie einfach die Spalte in einer der Tabellen um und es sollte funktionieren. Sie können auch die Spalte “user.name” in einen beliebigen Namen umbenennen, die Spalte “Sender” von “conversation_messages” in “id” umbenennen und eine natürliche Verknüpfung durchführen.
11802800cookie-checkLaravel 5.1: Joins mit gleichen Spaltennamen verarbeitenyes