[CakePHP]paginateでbindModel

これはみんなは知ってることなんだろうなぁと思いつつPOST。
僕は少々気付くのに時間がかかりました。

問題

paginateでbindModelしてもうまくいきません (><)

回答

paginateでbindModelを使うときはbindModelの引数にfalseを渡しましょう

		$this->Model->bindModel($bind, false);
		$this->paginate = array(
			"Model" => array(
				"conditions" => $conditions,
				"limit" => 30,
				"order" => array("Model.created" => "ASC"),
			),
		);
		$lists = $this->paginate("Model");

解説

bindModelの第2引数はクエリを投げた後にbindをリセットするかどうかのフラグで、デフォルトはtrueになっています。
paginateでデータを取得する場合、最初にデータ数をカウントするクエリを投げるので*1 カウントではbindされているのですが、2度目のデータ取得ではbindが外れてしまうことが原因でした。
bindModelの第2引数にfalseを渡すと、その処理においてはbindの設定が持続しますのでカウントした後のデータ取得でもちゃんとアソシエーションが維持されると言うわけです。

  1. データ数/limitでページ数を算出したりするためでしょう。 []
スポンサーリンク
336x280_1
336x280_1

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
336x280_1