親父プログラマーの呟き

WXY

CakePHP 3.x

[CakePHP] アソシエーション、find・newEntity時のcontain、associated指定 

投稿日:

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 使い方は同じ

 

-CakePHP 3.x

Copyright© WXY , 2021 All Rights Reserved Powered by STINGER.