Cakephp PHP WEB開発

【Cakephp2→4】モデル編: アソシエート条件の移行

※本サイトはPR表記を含みます。

Cake2とCake4でのアソシエーションの定義のお話です。

Cake2はクラスのメンバ変数として定義しますが、Cake4では initialize() メソッド内に定義していく形になります。

で、記事タイトルにあるように、アソシエーションに条件がある場合の一部移行方法です。

最初は conditions (SQLでいう where の役目) です。

Cakephp2のアソシエーション条件: conditions

// クラス内に定義
public $hasOne = array(
    'Hoge' => array(
        'conditions' => array(
            'Hoge.status' => array(0,10),
        ),
    ),
);

Cakephp4では setCondtions() になります。

Cakephp4のアソシエーション条件: setConditions

// initializeメソッド内で
$this->hasOne('Hoges')->setConditions(['Hoges.status IN' => [0, 10]]);

余談ですが、この例ではCake2ではカラムに配列を渡すとよしなに IN 句となっていたものの、Cake4では IN を明記する必要があります

次は order です。

Cakephp2のアソシエーション条件: order

public $hasMany = array(
    'Hoge' => array('order' => array('id' => 'DESC')),
);

Cakephp4では setSort() になります。

Cakephp4のアソシエーション条件: setSort

// initilazeメソッド内で
$this->hasMany('Hoges')->setSort(['Hoges.id' => 'DESC']);

他、公式ドキュメントにアソシエーションの条件で使えるメソッドの一覧があります。

命名規則的には呼び名も違いますが、set の接頭辞が付くような感じになるんですかね。

-Cakephp, PHP, WEB開発
-