findはcontain、newEntityはassociated指定
アソシエーションの指定がfindとnewEntityでは異なるのでメモ
find
モデル内(コントローラーでも同じ)で、containメソッド
public function initialize(array $config) { $this->belongsTo('Users'); … public function getList($condition) { $query = $this->find(); $query->contain(['Users']);
newEntity
コントローラー内で、オプション「associated」指定
// モデルでアソシエーションしておくこと $this->Hoges->newEntity($this->request->getData(), ['associated' => ['Users']]);
contain条件指定
引数無し
$query = $this->find()->contain('Users', function ($q) { return $q ->select(['id', 'name']) ->where(['roll'=>'1']) ; });
引数あり
$query = $this->find()->contain('Users', function ($q) use ($roll){ return $q ->select(['id', 'name']) ->where(['roll'=>$roll]) ; });
containはouter join 、inner joinはmatching
matchingは inner join で、使い方はcontainと同じ
$query = $this->find()->matching('Users', function ($q) use ($roll) { return $q ->select(['id', 'name']) ->where(['roll'=>$roll]) ; });
matching の逆は notMatching 使い方は同じ