2012-12-04 18 views
12

Sono confuso da quando ->get() in laravel ...laravel - Quando usare -> get()

AD ESEMPIO DB::table('users')->find(1) non ha bisogno -> get() per recuperare i risultati, nessuno fa User::find(1)

Il laravel docs dire "... eseguire la query utilizzando il metodo get o prima ..."

ho leggere il Query Builder Fluent e documenti eloquenti ma non capisco quando è richiesto l'utilizzo di get() ...

Grazie per l'aiuto enter image description here

risposta

14

Poiché la funzione find() utilizzerà sempre la chiave primaria per la tabella, la necessità di get() non è necessaria. Perché non puoi restringere la selezione e questo è il motivo per cui cercherà sempre di ottenere quel record e di restituirlo.

Ma quando si utilizza il Fluent Query Builder è possibile annidare le condizioni in quanto tali:

$userQuery = DB::table('users'); 
$userQuery->where('email', '=', '[email protected]'); 
$userQuery->or_where('email', '=', '[email protected]'); 

Ciò consente di aggiungere le condizioni in tutto il codice fino a quando si vuole realmente prendere loro, e poi si sarebbe chiamata la funzione get().

// Done with building the query 
$users = $userQuery->get(); 
+0

Grazie nerdklers, apprezzo molto la risposta! Quindi 'get()' ** solo ** non richiesto quando si usa '-> find()' ... Non riesco a trovare nessun documento su quando è richiesto l'uso ... Inoltre è -> get() l'utilizzo non è richiesto in Eloquent o l'utilizzo get() è lo stesso in Eloquent e in Fluent Query Builder? Grazie per l'aiuto! [] [1] [1]: http://i6.minus.com/jLj4oKVAVXP8l.png –

+1

Pensa in questo modo: quando non sai esattamente cosa restituirà una query, allora bisogno di usare 'get()'. Ad esempio non puoi usarlo con 'all()' dato che ** sai ** che restituirà tutti i record e non è possibile applicare ulteriori condizioni. È lo stesso con 'find()' dato che sai che cercherà solo di recuperare un record. –

+0

@nerdklers - bel chiarimento. Potresti pensare di aggiungerlo alla risposta principale. –

0

find restituisce una riga dal database e rappresentano come un oggetto fluente/eloquenti. per esempio. SELECT * FROM users WHERE id = 3 è equivalente a DB::table('users')->find(3);

get restituisce una matrice di oggetti. per esempio. SELECT * FROM users WHERE created_at > '2014-10-12' equivale a DB::table('users')->where('created_at', '>', '2014-10-12')->get() restituirà un array di oggetti contenenti utenti in cui il campo creato in è più recente di 4014-10-12.

10
  • Per find(n), si recupera una riga in base alla chiave primaria che è 'n'.
  • Per first(), si recupera la prima riga tra tutte le righe che soddisfano le clausole where.
  • Per get(), si recupera tutte le righe che corrispondono alle clausole where. (Si noti che i loop sono necessari per accedere a tutte le righe o si otterranno degli errori).
0

Il metodo get() fornisce tutti i valori dal database che soddisfano i parametri dove, come prima(), si ottiene solo il primo risultato. Usa find() e findOrFail() quando stai cercando una chiave. Ecco come li uso:

Quando voglio tutti i dati da una tabella, utilizzo il metodo all() Model :: all();

Quando voglio trovarlo con la chiave primaria: Modello :: find (1) -> first(); oppure Modello :: findOrFail (1) -> first(); Funzionerà se c'è una riga con una chiave primaria di uno. Dovrebbe solo recuperare una riga, quindi io uso first() invece di get(). Ricorda che se hai eliminato la riga che utilizzava la chiave 1, o non disponi di dati nella tabella, il tuo find (1) fallirà.

Quando sto cercando dati specifici come in una clausola where: Model :: where ('field', '=', 'value') -> get();

Quando desidero solo il primo valore dei dati nella clausola where. Modello: dove ('campo', '=', 'valore') -> first();

Problemi correlati