モデル

モデルとは?

データを取得し、操作し、あるいはそれを消去したい場合、その処理は常にモデルによって行われるべきです。モデルは、ある種のデータ表現であり、 データを変化させるメソッドを持ちます。たとえば。コントローラには SQL クエリを一切記述せず、モデル側にそれを記述し、コントローラではモデルが実行したクエリを呼び出す、 というような処理が出来ます。この方法によって、データベースを変更した時もコントローラを書き換える必要はなく、データベースに影響を及ぼすモデルのみを書き換えるだけですむのです。

どのようにモデルを使うか?

Fuel において、モデルの本質は単なる クラス です。他のものと同様なのです。つまりライブラリ以外のなにものでもありません。 ただし Model_ 接頭辞が付いているので、他のクラスと見分けを付けることが容易になります。モデルを有効に使うためには、他のクラスを必要とするでしょう。

モデルを作る


namespace Model;

class Welcome extends \Model {

    public static function get_results()
    {
        // Database interactions
    }

}

現在の名前空間の外部にあるグローバルからクラスを使う時には、 バックスラッシュを接頭辞としてつけることを忘れないでください。もしこの点について理解していない場合は、 PHP.net の名前空間に関する部分を読んでください。

モデルへのアクセス

PHP は、現在の名前空間にクラスをインポートするための use キーワードをもっています。 このキーワードによって、特定のクラスのファイルの中で、モデルクラス名 Model\WelcomeWelcome という単純な名前に短縮出来ます。


use \Model\Welcome;

class Controller_Welcome extends Controller
{
    public function action_index()
    {
        $results = Welcome::get_results();
    }
}   

モデルを書く

モデルは、どのようなかたちのデータストレージに対しても使うことができますが、ここでは SQL での利用に焦点を当てましょう。というのも、 それが最もよく使われているものだからです。ほとんど常だと思いますが、作られるモデルには少なくとも CRUD メソッド: create, read, update, delete (あるいはそれらのバリエーション) の 4 つが全て含まれているはずです。Fuel においては、 モデルは、デフォルトでは何も継承する必要がありません。 もちろん、自分なりのベースモデルを作ることや Fuel の Orm パッケージ を使うことも出来ます。

SQL クエリを書く

DB クラス を使ってネイティブな SQL クエリを次のように作成することが出来ます:

DB::query('SELECT * FROM users WHERE id = 5');

クエリビルダを使う

データをエスケープする、データを配列で使う、あるいは複数のデータベースエンジンを跨ぐことが出来るようなアプリケーションを作る、このような時、 ネイティブな SQL が重荷になることがあります。DB クラスのクエリビルダのメソッドを用いれば、ネイティブ SQL を抽象化して書くことが出来ます。

DB::select('title','content')->from('articles')->execute()->get('title');

ネイティブ SQL クエリとクエリビルダの利用については DB クラス のドキュメントをご覧ください。

Using Model_Crud to create models

One possible way of creating models is by using Model_Crud, which adds a commonly used functionality to your models for interacting with a database table. There's an example of its usage below.

// find all articles
$entry = Model_Article::find_all();

// find all articles from category 1 order descending by date
$entry = Model_Article::find(array(
    'where' => array('category_id', 1),
    'order_by' => array('date' => 'desc')
));

Using the Orm to create models

For models with more functionality, like support for relations, you can use the Orm Package, which adds a lot of functionality out-of-the-box to your models. There's an example of its usage below.

// 全ての記事を探し出す
$entry = Model_Article::find('all');

// 日付逆順でカテゴリ 1 に属する全ての記事を探し出す
$entry = Model_Article::find('all', array(
    'where' => array('category_id', 1),
    'order_by' => array('date', 'desc')
));

Model_Crud and the ORM package use similar syntax, which makes it simple to migrate once you require more functionality than Model_Crud can provide.