2017-07-23 21 views
0

Nichts nervt mich mehr als Code, der nicht elegant aussieht. Das ist einer der Gründe, warum ich zum Laravel übergegangen bin. Mit Laravel kann ich meine App effizient und sehr schön schreiben. SQL in Form der Eloquent Models oder des Query Builders verursacht jedoch immer noch Schandflecke.Wie schreibe ich eloquente Anfragen?

Eloquent ist gut für Einleitungs-Abfragen:

$findUsername = User::find(Auth::id())->username; 

Aber kämpft ordentlich kompliziertere Anfragen zu vertreten.

Beispiel 1:

$lobbyid = Request::get('lobbyid'); 

// I personally prefer single line variables for neatness 
$checkOnline = UserLobbyInfo::select('id', 'online')->where([ 
    ['userid', '=', Auth::id()], 
    ['lobby', '=', $lobbyid] 
])->first(); 

if (count($checkOnline) && $checkOnline->online == "1") { 
    // if the user is online make sure you send a leave message 
    // we do not have to actually set online to 0 because we are removing the whole record 
    $this->send([ "lobby" => $lobbyid ])->leave(); 
} 

Beispiel 2:

return UserLobbyInfo::join('lobbies', 'lobbies.id', '=', 'user_lobby_info.lobby') 
      ->select('user_lobby_info.userid', 
        'user_lobby_info.approved', 
        'user_lobby_info.invitedby', 
        'lobbies.id AS lobbyid', 
        'lobbies.title') 
      ->where([ 
        ['user_lobby_info.userid', '=', Auth::id()], 
        ['user_lobby_info.approved', '=', 2] 
       ]) 
      ->orWhere(function ($query) { 
       $query->where('lobbies.owner', '=', Auth::id()) 
         ->where('user_lobby_info.approved', '=', 1); 
      }) 
      ->get(); 

Dieser Beitrag mich als zu wählerisch oder ocd charakterisieren könnte, aber meine Absicht ist es, den besten Code, den ich möglich Dose zu schreiben. Dies ist ein Teil der Lernkurve. Ich hätte gerne ein paar stilistische Ideen, um den natürlichen Ablauf dieser Abfragen zu verbessern, wenn sie in meinen Code aufgenommen werden.

Dinge, die ich bereits im Kopf haben:

  • machen Abfragen alle Einzel
  • Vereinzeler Abfragen in separate Funktionen
+2

In Beispiel 2 verwenden Sie Query Builder und nicht eloquent. Erfahren Sie, wie Sie Beziehungen verwenden, und Ihr Code wird eleganter. –

+1

'User :: find (Auth :: id()) -> Benutzername;' Was ist mit 'Auth :: user() -> Benutzername'? – tkausl

+0

Ich würde empfehlen, wenn möglich, 'wo' in Bereichen zu verstecken und' Join' in Beziehungen. Beachten Sie auch die "Punkt" -Syntax. Dann wird Ihre Abfrage wie folgt aussehen: 'UserLobbyInfo :: select (["title", "lobbyid"]) -> mit (["lobbies.userid", "lobbies.approved") -> forActiveUser (Auth :: id()); 'Granularität ist ein Schlüssel. – Axalix

Antwort

-2

Sie müssen lernen, wie viele zu eins-Beziehungen viele, viele verwenden und versuchen Sie die Arbeit mit elequant ist einfacher als Query Builder