DB::queryの戻り値をModel型で返す方法をメモ

データベースへクエリを投げる方法が多々あるが、副問い合わせなどを使用した複雑なSQLなどになるとSQLを直接書いた方が可読性を考えてもよい
※直接SQLを実行する場合にはエスケープ処理をは自動的に行われないため、手動でいれることが必要になる

select文(稀にupdate文も)に限って言うとSQL直接記述のほうが今後のカスタマイズなど考えてもトータル間違いない。この場合crudすべてをSQL直接記述にしたほうが統一していいが、便利なメソッドもあるので、適時使い分けるのがいい。

データベースへクエリを実行する方法

データベース処理を行う方法

1.DBクラスのDB::queryメソッドで直接SQLを記述してクエリを実行する
2.DBクラスのクエリビルダーメソッドを使用してクエリを実行する
3.orm/Modelクラスの静的メソッドを使用してクエリを実行する

「1.DBクラスのDB::queryメソッドで直接SQLを記述してクエリを実行する」を使う場合と「3.orm/Modelクラスの静的メソッドを使用してクエリを実行する」を使う場合だと戻り値の型が違う。戻り値に関しては「3.orm/Modelクラスの静的メソッドを使用してクエリを実行する」の場合にはorm/Modelが返り、modelに関わるメソッドを備えているためなにかと便利。

そのため、DB::queryをmodel型に変換する方法をメモ
※参考:http://docs.fuelphp.com/classes/database/usage.html

Orm/Modelを継承したModel_Userを用意

	protected static $_properties = array(
		'id',
		'username',
		'password',
		'group',
		'email',
		'last_login',
		'created_at',
		'updated_at'
	);

「3.orm/Modelクラスの静的メソッドを使用してクエリを実行する」でusername,passwordに一致するレコードを取得

$users = Model_User::find(
		'all',
		array('username' => $username,'password' => $password)
		);
array
  2 =>
    object(Model_User)[32]
      protected '_is_new' => boolean false
      protected '_frozen' => boolean false
      protected '_data' =>
        array
          'id' => string '2' (length=1)
          'username' => string 'admin' (length=5)
          'password' => string '5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8' (length=40)
          'group' => string '1' (length=1)
          'email' => string 'test@hotmail.com' (length=16)
          'last_login' => string '1' (length=1)
          'created_at' => string '111111111' (length=9)
          'updated_at' => string '1356073749' (length=10)
      protected '_original' =>
        array
          'id' => string '2' (length=1)
          'username' => string 'admin' (length=5)
          'password' => string '5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8' (length=40)
          'group' => string '1' (length=1)
          'email' => string 'test@hotmail.com' (length=16)
          'last_login' => string '1' (length=1)
          'created_at' => string '111111111' (length=9)
          'updated_at' => string '1356073749' (length=10)
      protected '_data_relations' =>
        array
          empty
      protected '_original_relations' =>
        array
          empty
      protected '_reset_relations' =>
        array
          empty
      protected '_view' => null
      protected '_iterable' =>
        array
          empty

「1.DBクラスのDB::queryメソッドで直接SQLを記述してクエリを実行する」でusername,passwordに一致するレコードを取得

「3.orm/Modelクラスの静的メソッドを使用してクエリを実行する」と同様に戻り値の型をMode_Userにするためにはas_objectメソッドでオブジェクト名を指定する必要がある。さらにas_arrayメソッドで配列へ変換することも同時に必要。これで実行すると同様の結果になる。
※bindメソッドでエスケープ処理を行っている

$users = DB::query(
		'SELECT * FROM tb_users WHERE username = :username AND password = :password'
		)
->bind('username', $username)
->bind('password' , $password)
->as_object('Model_User')
->execute()
->as_array();
array
  0 =>
    object(Model_User)[33]
      protected '_is_new' => boolean false
      protected '_frozen' => boolean false
      protected '_data' =>
        array
          'id' => string '2' (length=1)
          'username' => string 'admin' (length=5)
          'password' => string '5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8' (length=40)
          'group' => string '1' (length=1)
          'email' => string 'test@hotmail.com' (length=16)
          'last_login' => string '1' (length=1)
          'created_at' => string '111111111' (length=9)
          'updated_at' => string '1356073881' (length=10)
      protected '_original' =>
        array
          'id' => string '2' (length=1)
          'username' => string 'admin' (length=5)
          'password' => string '5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8' (length=40)
          'group' => string '1' (length=1)
          'email' => string 'test@hotmail.com' (length=16)
          'last_login' => string '1' (length=1)
          'created_at' => string '111111111' (length=9)
          'updated_at' => string '1356073881' (length=10)
      protected '_data_relations' =>
        array
          empty
      protected '_original_relations' =>
        array
          empty
      protected '_reset_relations' =>
        array
          empty
      protected '_view' => null
      protected '_iterable' =>
        array
          empty

戻り値の型がModel_Userになっている

その他おすすめの備忘録

Tagged with:
 

コメントを残す

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

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>