libro
www.tuyano.com
初心者のためのCakePHP3 プログラミング入門

複数テーブルの連携 (4/5)

作成:2015-10-24 09:18
更新:2015-10-24 09:18

■MembersTableクラスの用意

続いて、テーブルクラスを作成しましょう。まずは、Memberのテーブルクラスからです。「Model」内の「Table」フォルダ内に、「MembersTable.php」ファイルを作成して下さい。ソースコードは、下のリスト欄のように記述しておきましょう。

MembersTableクラスでは、テーブルクラスの初期化処理と、バリデーション関係の処理が用意されています。バリデーションは既に説明しましたから省略しましょう。今回のポイントは、初期化処理をしているinitializeメソッドです。
$this->table('members');
$this->displayField('name');
$this->primaryKey('id');

まず、テーブル関係の基本設定を行う処理がありますね。tableメソッドでテーブル名を設定し、displayFieldでデータを表示する際に用いるフィールド名をnameに設定しています。そしてprimaryKeyでプライマリキーのフィールド名を設定します。これらはテーブルの基本処理であり、アソシエーションは関係ありません。
$this->hasMany('Messages', [
    'foreignKey' => 'members_id'
]);

これが、アソシエーションの設定になります。「hasMany」は、先ほどの「1対多(has many)」のアソシエーション設定を行うためのメソッドです。これは以下のように呼び出します。
$this->hasMany( 関連するテーブル , [ 設定情報の連想配列 ]);
ここでは「Messages」を第1引数に設定しています(エンティティクラス名は「Message」ですが、ここで設定する値は「Messages」になります)。また第2引数の連想配列には、「foreignKey」を指定します。これは、テーブルに用意した外部キーのフィールド名です。これにより、members_idを外部キーとして認識するようになります。

ここではhasManyを使いましたが、その他のアソシエーション設定メソッドも、引数の指定など基本的には同じです。ただ、呼び出すメソッドが違うだけです。

●has oneの場合
$this->hasOne( 関連するテーブル , [ 設定情報の連想配列 ]);

●has manyの場合
$this->hasMany( 関連するテーブル , [ 設定情報の連想配列 ]);

●belongs toの場合
$this->belongsTo( 関連するテーブル , [ 設定情報の連想配列 ]);

●belongs to manyの場合
$this->belongsToMany( 関連するテーブル , [ 設定情報の連想配列 ]);

基本的にアソシエーションの名前と同じようなメソッド名になっていますから、使い方そのものに迷うことはほとんどないでしょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

<?php
namespace App\Model\Table;

use App\Model\Entity\Member;
use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;

class MembersTable extends Table
{

    public function initialize(array $config)
    {
        parent::initialize($config);

        $this->table('members');
        $this->displayField('name');
        $this->primaryKey('id');

        $this->hasMany('Messages', [
            'foreignKey' => 'members_id'
        ]);
    }

    public function validationDefault(Validator $validator)
    {
        $validator
            ->add('id', 'valid', ['rule' => 'numeric'])
            ->allowEmpty('id', 'create');

        $validator
            ->requirePresence('name', 'create')
            ->notEmpty('name');

        $validator
            ->allowEmpty('mail');

        return $validator;
    }
}
※関連コンテンツ

「初心者のためのCakePHP3 プログラミング入門」に戻る