Laravel 5.1: Griff-schließt mit gleichen Spaltennamen
Ich versuche zu Holen, sind folgende Dinge aus der Datenbank:
- Benutzernamen
- Benutzer avatar_name
- Benutzer avatar_filetype
- komplette conversation_messages
mit der folgenden 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 gut so weit, aber der avatar Spalte name 'name
", wie die Spalte name aus der ' users
" - Tabelle.
Also wenn ich mit dieser Abfrage um die Ausgabe über die $conversation->name
, die avatar.name
überschreibt die users.name
Gibt es eine Möglichkeit, benennen Sie die Ausgabe der Abfrage, wie das mysql - "als" - Funktion, bei laravel 5.1?
Beispiel:
$conversation->avatarName
$conversation->userName
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meh okay.. ich habe eine einfache Lösung hier
Wie Sie erwähnen, habe ich den geforderten "as-Funktion" neben der Tabelle.columnName
Werfen Sie einen Blick auf dieses Beispiel zu versuchen, join drei Tabellen Mitarbeiter, Kunden und Buchungen(pivot-Tabelle).
Hatte ich das folgende problem, Vereinfachtes Beispiel:
$result
ist eine Sammlung vonDonation
Modelle. ABER VORSICHT:beide Tabellen haben eine 'created_at' - Spalte. Nun, die
created_at
angezeigt wird, wenn dabei$result->created_at
? ich weiß es nicht. Es scheint, dass eloquent ist dabei eine impliziteselect *
wenn dabei eine Verknüpfung, die Rückkehr ModellenDonation
aber mit zusätzlichen Parametern.created_at
scheint zufällig. Also, was ich wirklich wollte, ist eine Rückkehr allerDonation
Modelle der Benutzer mit E-Mail -[email protected]
Lösung ist diese:
Yeah, einfach benennen Sie die Spalte entweder in der Tabelle und es sollte funktionieren.
Auch das, was Sie tun können, ist, benennen Sie den Benutzer.Spalte name, um alles, auch umbenennen sender-Spalte conversation_messages id und führen Sie einen natürlichen join.