Когда использовать Eloquent (ORM) над Fluent (Query Builder)?

Возможно, из-за моего фона Codeigniter, я просто не очень люблю наслаждаться Laravel 4 Eloquent ORM. Скажем, я хотел бы написать запрос, который упорядочивает список сообщений по id, нисходящий, как может Eloquent бить ясность DB::table('posts')->orderBy('id', 'desc')->get();?

Есть ли веская причина использовать Eloquent over Fluent, было ли это главным образом для соединения таблиц?

Ответ 1

Я тоже пришел из codeigniter, и это мой опыт: Обычно я использую Eloquent и Fluent вместе. Eloquent - это то, что позволяет вам хорошо работать с отношениями, операциями CRUD и т.д. Когда вам нужно выполнять некоторые операции SQL, вы можете легко добавить некоторые текущие функции

В приведенном выше примере я вижу, что у вас есть стол сообщений. Если у вас есть модель публикации, то одно и то же, написанное с использованием Eloquent, следующее:

Post::orderBy('id', 'desc')->get();

Итак, я получаю это, если вы расширяете Eloquent, чем

Model_name::some_functions

совпадает с

DB::table('table_name')->some_functions

Реальная власть возникает, когда вам нужно создать или обновить модель или, например, получить комментарии к сообщению. Чем это становится легко:

$comments = Post::find($id)->comments;

Итак, ответ: вам нужно использовать бесплатные функции, чтобы получить упорядоченный список. Вы можете использовать их как с DB:: table ('posts') → orderBy или Post:: orderBy

Ответ 2

Используя модели и Eloquent, вы также можете написать собственные функции в классе модели для выполнения общих операций, например, для вывода нескольких конкатенированных полей.

например:

<?php
class User extends Eloquent {
    //Standard Relation Function
    public function posts() {
        return $this->hasMany('Post');
    }
    //Custom function
    public function fullname() {
        return $this->firstName.' '.$this->lastName;
    }
}

//Somewhere else in your code, if you need a users full name...
$user = User::find(3);
$name = $user->fullname();