【PHP】FuelPHP - Model_Crudの作り方と使い方

FuelPHPにおける Model_Crud とはいわゆるORマッパーと呼ばれるもので、テーブルにおけるCRUD操作を劇的に簡単にします。

今回はこれとMySQLを使ってかんたんなCRUD処理を作ってみます。

データベース

使用するテーブル

以下のようなテーブルを用意しました。

定義

>SHOW CREATE TABLE products;

CREATE TABLE `products` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '商品ID',
  `name` varchar(16) DEFAULT NULL COMMENT '商品名',
  `price` varchar(16) DEFAULT NULL COMMENT '価格',
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT 'レコード作成日',
  `updated_at` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT 'レコード更新日',
  `is_deleted` tinyint(1) DEFAULT '0' COMMENT '削除フラグ',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品マスタ';

データ

>SELECT * FROM products;

+----+-----------+-------+---------------------+------------+------------+
| id | name      | price | created_at          | updated_at | is_deleted |
+----+-----------+-------+---------------------+------------+------------+
|  1 | りんご    | 100   | 2019-02-21 00:00:00 | NULL       |          0 |
|  2 | ぶどう    | 150   | 2019-02-21 00:00:00 | NULL       |          0 |
|  3 | バナナ    | 180   | 2019-02-21 00:00:00 | NULL       |          0 |
+----+-----------+-------+---------------------+------------+------------+
3 rows in set (0.01 sec)

実装

oilコマンドでModelを作成する

書式

php oil r fromdb:model [テーブル名] --crud

コマンド実行例

$ php oil r fromdb:model products --crud
  Created model: APPPATH/classes/model/products.php
  Created migration: APPPATH/migrations/001_create_products.php

成功するとmodel/配下にテーブル名のModelクラスと、migrations/配下にマイグレーション用のクラスが生成されます。

Modelクラスの実装

model/products.php (Products_Modelクラス)

<?php
class Model_Products extends \Model_Crud
{
    protected static $_properties = array(
        "id",
        "name",
        "price",
        "created_at",
        "updated_at",
        "is_deleted",
    );  
    protected static $_table_name = 'products';
}

使用例

// 主キーで1件取得
$product = Model_Products::find_by_pk(1);
var_dump($product->to_array());
array(6) {
  ["id"]=>
  string(1) "1"
  ["name"]=>
  string(9) "りんご"
  ["price"]=>
  string(3) "100"
  ["created_at"]=>
  string(19) "2019-02-21 00:00:00"
  ["updated_at"]=>
  NULL
  ["is_deleted"]=>
  string(1) "0"
}

他にも多数のメソッドが用意されています。詳しくは以下

http://fuelphp.jp/docs/1.7/classes/model_crud/methods.html

なお、一般的にORマッパーは不特定多数からアクセスがあるようなサービスでは使用しないことが推奨されています。

理由としてはフレームワークが用意する機能なので、フレームワーク内部で様々な処理を挟む(この辺は全然詳しくない…)ので性能面で難あり。だそうです。

管理画面などの利用者が限定されたシステムなどではコード量が圧倒的に減るので有効かと思われます。

コメント

このブログの人気の投稿

docker-compose up で proxyconnect tcp: dial tcp: lookup proxy.example.com: no such host

docker-compose で起動したweb、MySQLに接続できない事象

【PHP】PHP_CodeSnifferを使う(コーディングルールのカスタマイズ)