LoginSignup
15
14

More than 5 years have passed since last update.

FuelPHP開発入門_08

Posted at

では引き続きOrm/Modelの作成に映って参ります。
Ormというのは、開発入門の02で触ったconfig.phpに記述のあった
FuelPHPがもともと持っているパッケージのひとつです。

※02記述時点ではOrmを入れていませんでしたが、必要になったので追記しました

ORMとはObjectRelationMappingの略で、Model同士のリレーションを作成するためのものです。
これを利用することによって、例えばPersonalテーブルの個人IDをキーにProfileテーブルから
いっぺんにデータを引きずり出す、というようなことが可能になります。

モデルクラス記述

user.php
<?php
use Orm\Model;

class Model_User extends \Orm\Model
{
    protected static $_properties = array(
        'id',
        'email',
        'password',
        'group',
        'last_login',
        'login_hash',
        'profile_fields',
        'created_at',
        'updated_at'
        );

    protected static $_primary = array('id');

    protected static $_has_one = array(
        'profile' => array(
            'key_from' => 'id',
            'model_to' => 'Model_Profile',
            'key_to' => 'user_id',
            'cascade_save' => true, // 主モデル保存時に参照モデルを保存するか
            'cascade_delete' => true, // 主モデル削除時に参照モデルを削除するか
        )
    );
}

Userテーブルについては、私はSingleAuthパッケージを利用するためにこの形式で固定しています。
かなり初期の方に設定した箇所なので過不足あるかもしれません。

モデルと接続を行うDBのテーブル名は、モデル名の複数形になります。
userならusers、categoryならcategoriesです。

ひとまずこの形式(プロパティ、主キー指定、リレーション)が書ければモデルとしての役割は果たすことができます。
_has_manyや_belongs_toなどその他のリレーションについてはFuelPHP公式リファレンスを参照してください。

前回クエリビルダについて書いた中で

DB->select()->from->('users')->where('id',$id)->execute()->as_array();

といった記述をしましたが、独自モデルを作成した場合これが

$user=Model_User::find_by_id($id);
$email=$user->email;

という形で記述することができるようになります。
戻り値も配列ではなくクラスの形になりますので、呼び出しがシンプルになります。

ちなみに参照モデルも一緒に呼び出したい場合は

$user=Model_User::find_by_id($id,array('related'=>array('profile')));
$name=$user->profile->name;

と記述します。
relatedには、モデル作成時$_has_oneに記述したキーを記述します。
_has_manyはまだ試してません!以上!

出番無かった顔文字ヽ(´@ω@`)ノ

15
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
14