Pochodziłam z codeigniter również i to jest moje doświadczenie: Używam Eloquent i Fluent zwykle razem. Eloquent to rzecz, która pozwala ci ładnie pracować z relacjami, operacjami CRUD itp. Kiedy potrzebujesz wykonać pewne operacje SQL, możesz łatwo dodać płynne funkcje. W przykładzie, o którym wspomniałeś powyżej, widzę, że masz tabelę postów. Jeśli masz model poczta to samo napisane przy użyciu Eloquent jest:
Post::orderBy('id', 'desc')->get();
Więc jak rozumiem, jeśli rozciąga Eloquent niż
Model_name::some_functions
jest taka sama jak
DB::table('table_name')->some_functions
Prawdziwa moc pojawia się, gdy trzeba utworzyć lub zaktualizować model lub na przykład uzyskać komentarze do postu. Następnie staje się to łatwe:
$comments = Post::find($id)->comments;
Odpowiedź brzmi - musisz użyć płynnych funkcji, aby uzyskać uporządkowaną listę. Możesz ich używać zarówno z DB :: table ("posty") -> orderBy lub Post :: orderBy
thx, tylko potwierdzenia dla 'Post :: find ($ id) -> Komentarze,' Katalog 'metoda comments', to trzeba uruchomić przed' tabeli Post' , czy może być łączeniem między tabelami "Post" i "Comment"? – bitinn
Nie jestem pewien, czy rozumiem. Masz tabelę postów i komentarzy, masz post_id w tabeli komentarzy i opisujesz metodę w post class (function comments() {return $ this-> hasMany ('comment');} .Ile też masz klasę komentarzy. możesz użyć Post :: find ($ id) -> komentarzy, które dołączą do twojego posta z komentarzami (np. selet * z postów dołącz komentarze na komentarze.post_id = posts.id) – Victor
Jako wyjaśnienie, Eonquent dziedziczy po Fluent, więc w zasadzie wszystko co ty mieć w wersji Fluent, może być użyty w elokwentnie Jeśli robisz "Post :: find ($ id) -> comments", nie robisz łączenia domyślnie, ale najpierw 'SELECT * FROM wpisów WHERE id = $ id' i później 'SELECT * FROM comments WHERE post_id = $ id' ale tylko wtedy, gdy wywołasz/pytasz o' -> komentarze'. Jeśli chcesz załadować wszystkie relacje w tym samym czasie, sprawdź [Eloquent's Eager Ładowanie] (http://laravel.com/docs/eloquent#eager-loading). – trm42