【FuelPHP】Ormモデルのリレーションを設定
Ormパッケージを利用する場合は、先にOrmパッケージの設定を行って下さい。
wakuwakupush.hatenablog.com
FuelPHPでは、リレーションタイプが4種類あります。
・Belongs To
・Has One
・Has Many
・Many to Many
今回は、「Belongs To」と「Has Many」のみを利用します。
参考
はじめに - Relations - Orm パッケージ - FuelPHP ドキュメント
1.Ormモデルとテーブルの用意
今回はoilコマンドを利用して、「users」「phones」のOrmモデル、テーブルを自動生成します。
コマンドライン上で、次のコマンドを入力します。
$ php oil g model users name:varchar[50] $ php oil g model phones user_id:int number:varchar[20]
「users」「phones」のモデル、マイグレーションが自動生成されます。
次はテーブルを生成します。次のコマンドを入力します。
$ php oil refine migrate
DBにテーブルが作成されていればOKです。
2.レコードの作成
レコードを作成するときは、下記のようにコントローラー内で入力します・
<?php // インスタンス $user = Model_User::forge(); // プロパティに値を代入 $user->name = 'karesansui'; // DBにinsert $user->save();
コントローラにアクセスすると、usersテーブルへの挿入が行われています。
3.リレーションの設定
モデル間の関連性の記述をしていきます。
APPPATH/classes/model/user.php 内でリレーションを設定します。
<?php class Model_User extends \Orm\Model { protected static $_has_many = array( 'phones' => array( 'model_to' => 'Model_Phone', 'key_from' => 'id', 'key_to' => 'user_id', 'cascade_save' => 'true', 'cascade_delete' => 'true', ) );
次にAPPPATH/classes/model/phone.php 内でリレーションを設定します。
<?php class Model_Phone extends \Orm\Model { protected static $_belongs_to = array( 'users' => array( 'model_to' => 'Model_User', 'key_from' => 'user_id', 'key_to' => 'id', 'cascade_save' => 'true', 'cascade_delete' => 'false', ) );
リレーションの設定が完了したら、下記のようにコントローラーに記載します。
<?php $user = Model_User::find(1); $phone = Model_Phone::forge(); $phone->number = '090-1111-2222'; $user->phone[] = $phone; $user->save();
コントローラにアクセスして、SQLを確認してみると、usersテーブルの更新とphonesテーブルへの挿入が行われています。