いろいろ~備忘録~

WEBエンジニアによる記録

勉強になったことを記録

【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モデル、テーブルを自動生成します。

wakuwakupush.hatenablog.com

コマンドライン上で、次のコマンドを入力します。

$ 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テーブルへの挿入が行われています。

下記詳細
はじめに - Relations - Orm パッケージ - FuelPHP ドキュメント