WinRoadのLaravel4初心者講座

次世代PHPフレームワークのLaravel4を初心者向けに解説して参ります。

Winroad徒然草の管理人がお届けします
Eloquent ORMの基礎

Eloquent ORMの基礎

このエントリーをはてなブックマークに追加

「データベースの基礎」では、Eloquent ORMは、一定の規約を守れば、とても簡単にモデルを作成することができると記述しましたが、規約通りではないテーブルは使用できないのでしょうか。

基本的な定義

いいえ、Laravel4では、簡単な指定で、Eloquent ORMで使用できるようになります。下記にその方法を記述します。

  1. テーブル名は、$tableプロパティに指定すれば、使用できます。
  2. 主キーはPrimaryKeyプロパティで、指定することが出来ます。
  3. created_atとupdated_atカラムは、$timestampsプロパティをfalseにすれば、無くても大丈夫です。

基本例

class User extends Eloquent{
 //テーブル名の指定
 protected $table='my_users';
 //主キーの指定
 protected $primaryKey='Code';
 //日付自動更新の設定解除
 public $timestamps=false;
 }

ソフトデリート

Eloquent ORMでは、テーブルのレコードを削除したように見せかけるソフトデリートという機能があります。その方法を記述します。

  1. deleted_atカラムを作成します。
  2. モデルのsoftDeleteプロパティにtrueを指定します。
    protected $softDelete=true;

これで、モデルに対し、deleteメソッドを使用すれば、deleted_atカラムに現在の時間がセットされます。ソフトデリートされたモデルに対しクエリーされても「削除済み」、つまり、deleted_atカラムに日時がセットされたモデルはクエリー結果に表示されません。

尚、ソフトデリートされたデータを扱いたい場合は下記のようなメソッドを使用します。

  • withTrashedメソッドで、ソフトデリートされたモデルも結果に含める
    $user=User::withTrashed()->get();
  • trashedメソッドで、ソフトデリートされたモデルのみを選択
    $user=User::trashed()->get();
  • restoreメソッドで、ソフトデリートされたモデルの復活
    $user=User::trashed()->where(‘account_id’,1)->restore();
  • forceDeleteメソッドで、データベースから完全に削除
    $user->forceDelete();

クエリースコープ

Eloquent ORMのクエリースコープは一度登録しておけば、クエリーのロジックを簡単に再利用できるようにしてくれます。スコープを定義するには、モデルのメソッド名にscopeをプレフィックス(接頭辞)として付けます。

  • クエリースコープの定義
    class User extends Eloquent{
    public function scopePopular($query){
    return $query->where(‘votes’,’>’,100);
    }
    }
  • クエリースコープを使用する
    $user=User::popular()->orderBy(‘created_at’)->get();

« »

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です