
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 の接頭辞が付くような感じになるんですかね。