Sono venuto da codeigniter anche e questa è la mia esperienza: Io uso Eloquent e Fluent di solito insieme. Eloquent è una cosa che ti permette di lavorare bene con le relazioni, le operazioni CRUD ecc. Quando hai bisogno di fare alcune operazioni SQL puoi facilmente aggiungere alcune funzioni fluenti
Nell'esempio che hai citato sopra vedo che hai la tabella dei post. Se si dispone di un modello di messaggio, allora la stessa cosa scritta utilizzando eloquente è:
Post::orderBy('id', 'desc')->get();
Quindi, come ho capito se si estende eloquente di
Model_name::some_functions
è lo stesso di
DB::table('table_name')->some_functions
Il vero potere arriva quando è necessario creare o aggiornare un modello o, ad esempio, ottenere commenti post. Di quello che diventa facilmente:
$comments = Post::find($id)->comments;
Quindi la risposta è - è necessario utilizzare le funzioni fluente ottenere l'elenco ordinato. Puoi usarli entrambi con DB :: table ('posts') -> orderBy o Post :: orderBy
thx, solo per confermare, per 'Messaggio :: trovare ($ id) -> commenti,' il metodo 'comments', ha a correre contro' tabella Post' o può essere un join tra la tabella 'Post' e' Comment'? – bitinn
Non sono sicuro di aver capito. Hai una tabella di post e commenti, hai post_id nella tabella dei commenti e descrivi un metodo in post class (function comments() {return $ this-> hasMany ('comment');} Inoltre hai anche una classe di commenti. puoi usare Post :: find ($ id) -> commenti che si uniranno al tuo post con commenti (come selet * dai post unisci commenti su comments.post_id = posts.id) – Victor
Come chiarimento Eloquent eredita da Fluent quindi sostanzialmente tutto ciò che avere in Fluent, può essere usato in Eloquent Se stai facendo 'Post :: find ($ id) -> comments', non stai facendo join per default ma prima 'SELECT * FROM posts WHERE id = $ id' e dopo 'SELECT * FROM comments WHERE post_id = $ id' ma solo quando invochi/chiedi' -> commenti'. Se vuoi caricare tutte le relazioni contemporaneamente, controlla [Eloquent's Eager Caricamento in corso] (http://laravel.com/docs/eloquent#eager-loading). – trm42