9月
12
2009

[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でページ数を算出したりするためでしょう。 []

▼Advertisement

【Webサービスを作ろう!好評連載中!】このエントリーをはてなブックマークに追加 はてなブックマーク -
⇒ #1 挫折しないウェブサービス開発のための4つの心構え
Webサービス、Webアプリケーション開発に興味のある方は必見です!

【2月のイチオシ記事】このエントリーをはてなブックマークに追加 はてなブックマーク -
⇒ 社長になった私がお金にならないデータベースサイトを作った7つの理由

Written by suzuki in: メモ | タグ: ,

コメントはまだありません »

RSS feed for comments on this post.  トラックバックURL


コメントをのこす

| I have been indebted to Aeros Theme. |