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 を明記する必要があります。
■ Cakephp4: setConditions
https://api.cakephp.org/4.4/class-Cake.ORM.Association.HasOne.html#setConditions()
次は order です。
Cakephp2のアソシエーション条件: order
public $hasMany = array( 'Hoge' => array('order' => array('id' => 'DESC')), );
Cakephp4では setSort()
になります。
Cakephp4のアソシエーション条件: setSort
// initilazeメソッド内で $this->hasMany('Hoges')->setSort(['Hoges.id' => 'DESC']);
■ Cakephp4: setSoft
https://api.cakephp.org/4.4/class-Cake.ORM.Association.HasMany.html#setSort()
他、公式ドキュメントにアソシエーションの条件で使えるメソッドの一覧があります。
命名規則的には呼び名も違いますが、set の接頭辞が付くような感じになるんですかね。