web-dev-qa-db-ja.com

Fluent(Query Builder)ではなくEloquent(ORM)を使用する場合

Codeigniterの経歴のせいか、Laravel 4's Eloquent ORMをあまり楽しんでいません。投稿のリストをID、降順、降順で並べ替えるクエリを作成したいとします。 EloquentはどのようにしてDB::table('posts')->orderBy('id', 'desc')->get();の明快さを打ち負かすことができますか?

Eloquent over Fluentを使用する正当な理由はありますか?それは主にテーブルを結合するためでしたか?

13
bitinn

私も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で両方を使用できます

29
Victor

モデルと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();
3