※Laravel4.2系で検証
"eloquent"、とは流暢に話す・流暢な文章を書くといった様子を表す形容詞です。
文字通り直感的に操作できる、という印象があります。
EloquentORMを用いてDBを操作するには、モデルでEloquentクラスを継承します。
前置きはさておき、Eloquentのメソッドの基本的な使い方を以下に記します。
レコードのフェッチ
全件取得
$model = new Model();
$model->all();
プライマリキーでfetchする
$model->find(1);
条件指定
$model->where('column', '>=', 'value')->get();
第一引数にカラム名を指定
第二引数に式を指定「 = >= <= <> LIKE 」
第三引数に値を指定
WHEREのネスト
個人的に良いなと思ったのがWHEREのネストです。記述方法はシンプルで、ネストしたい条件をwhereNestedメソッドにクロージャで渡すことで実現できます。
例えば
deleted = 0 AND (description IS NOT NULL OR description IS NULL)
というクエリーは
$model->where('deleted', '=', 0)
->whereNested(function($query) {
$query->whereNotNull('description');
$query->whereNull('description');
})
->get();
このように記述することができます。
BETWEEN
$model->whereBetween('column', array('from', 'to'));
IS NULL/IS NOT NULL
$model->whereNull('column')
$model->whereNotNull('column')
IN/NOT IN
$model->whereIn('column', $value);
$model->whereNotIn('column', $value);
ORDER BY
昇順:
$model->orderBy('column')
降順:
$model->orderBy('column', 'DESC')
LIMIT
limit:
$model->take(limit_counts)
offset:
$model->skip(offset_counts)
毎回指定される条件を定義
モデルクラスで、scopeで始まるメソッドを定義すると、独自の条件を追加するメソッドを、特別な設定をすることなく、メソッドチェーンの中で指定することができます。
public function scopeDefaultCondition($query)
{
return $query->where(...任意の条件);
}
パラメータがある場合は第二引数に指定する(マニュアル未確認)
これは:
WHERE column_name = 'hoge';
と同じ。他のメソッド名と衝突するカラム名の場合は使用できないようです(ある意味当然?)