<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>WIDGET-INFO &#187; Model</title>
	<atom:link href="http://blog.widget-info.net/category/cakephp/model/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.widget-info.net</link>
	<description>WIDGET-INFOではCakePHPやIPhone情報、その他開発に関する情報を発信</description>
	<lastBuildDate>Tue, 09 Feb 2010 13:44:47 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>CakePHP find(&#8216;list&#8217;)について</title>
		<link>http://blog.widget-info.net/2010/01/cakephp-findlist/</link>
		<comments>http://blog.widget-info.net/2010/01/cakephp-findlist/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 14:16:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Model]]></category>
		<category><![CDATA[find]]></category>
		<category><![CDATA[List]]></category>

		<guid isPermaLink="false">http://blog.widget-info.net/?p=409</guid>
		<description><![CDATA[CakePHPの「find('list')」について少し触れようと思います。殆どの方は「find('list')」をすでに使いこなしているかと思います。]]></description>
			<content:encoded><![CDATA[<p>CakePHPの「find(&#8216;list&#8217;)」について少し触れようと思います。</p>
<p>殆どの方は「find(&#8216;list&#8217;)」をすでに使いこなしているかと思います。<br />
さてこの機能の出力結果はよくプルダウンメニューやセレクトボックスで利用可能な<br />
配列の成型になっています。<br />
例）</p>
<pre class="brush:php">array(
’1’=&gt;'値1',
’2’=&gt;'値2'
)</pre>
<p>のような形です。<br />
キーにはプライマリーキーが設定されますが、「値」の部分はどこを参照されるのか。<br />
<span id="more-409"></span><br />
CakePHPの内部を見ると答えが出てきます。<br />
参照してしているテーブルから「title」「name」「プライマリーキー」の順に<br />
フィールドを探しにいきます。<br />
大変便利ではありますが、さて上記3つが存在しない場合（プライマリキーは別として）、<br />
もしくは独自に指定したい場合はどうするのか。。。</p>
<p>もちろんCakePHPは用意しています（笑<br />
答えは</p>
<pre class="brush:php">$this-&gt;モデル名-&gt;displayField = '指定したフィールド名';</pre>
<p>こうすることで、参照するフィールドを変更することができます。<br />
コントローラー内部で変更することが可能なので、途中で変更してデータを<br />
取得といった方法も可能です。</p>
<p>ちょっと子ネタでした（笑</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.widget-info.net/2010/01/cakephp-findlist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP プライマリキーIDについて</title>
		<link>http://blog.widget-info.net/2009/12/cakephp_uuid/</link>
		<comments>http://blog.widget-info.net/2009/12/cakephp_uuid/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 15:05:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Model]]></category>
		<category><![CDATA[auto_increment]]></category>
		<category><![CDATA[UUIDs]]></category>
		<category><![CDATA[プライマリキー]]></category>

		<guid isPermaLink="false">http://blog.widget-info.net/?p=373</guid>
		<description><![CDATA[CakePHPのデータベース設計をしているとプライマリキーである「ID」は基本自動で追加してく「auto_increment」で「int」系を利用するかと思います。]]></description>
			<content:encoded><![CDATA[<p>CakePHPのデータベース設計をしているとプライマリキーである「ID」は基本<br />
自動で追加してく「auto_increment」で「int」系を利用するかと思います。<br />
もちろんCakePHPの基本構造として問題はありません（笑</p>
<p>ただ、この設定ではIDが連番となりURLの構造としては予想がつきやすいかと思います。<br />
<span id="more-373"></span></p>
<p>そこでCakePHPではIDを「auto_increment」に頼らないIDを作成することができます。<br />
CaekPHPではIDを「int」で指定することが基本と説明しましたが、これを<br />
「CHAR(36)」または 「BINARY(36)」として指定すると「UUIDs」という方式で<br />
CakePHPはIDを生成します。</p>
<p>この方式は４つのハイフンで区切られ、32バイトの文字列の36文字から形成され<br />
ユニークなIDとなっています。</p>
<p>例）<br />
4b1a307c-cfe4-4343-9d06-1094c0a80b06</p>
<p>これで推測されないIDとして作成することが可能となります。<br />
ユーザー情報など、連番で予想されやすいテーブルに対してこの方式を適用すると<br />
URLから直接アクセスされたり、セキュリティを強固にすることが可能となります。</p>
<p>※個人情報などはURLから直接参照など基本はしませんが（笑</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.widget-info.net/2009/12/cakephp_uuid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP　テーブル情報の削除</title>
		<link>http://blog.widget-info.net/2009/10/cakephp_cache_detabase_del/</link>
		<comments>http://blog.widget-info.net/2009/10/cakephp_cache_detabase_del/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 23:21:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cache]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Controller]]></category>
		<category><![CDATA[Model]]></category>
		<category><![CDATA[その他クラス]]></category>
		<category><![CDATA[File]]></category>
		<category><![CDATA[データベース]]></category>

		<guid isPermaLink="false">http://blog.widget-info.net/?p=318</guid>
		<description><![CDATA[CakePHPではデータベースのテーブル情報をキャッシュしてくれる機能があります。]]></description>
			<content:encoded><![CDATA[<p>CakePHPではデータベースのテーブル情報をキャッシュしてくれる機能があります。<br />
「app/config/core.php」内の設定で「Configure::write(&#8216;Cache.check&#8217;, true);」を<br />
適用していると生成されませんが、「app/tmp/cache/models」に<br />
データベースのテーブル情報がキャッシュとして保存されていきます。<br />
<span id="more-318"></span></p>
<p>これはテーブル情報をキャッシュすることで、フォームヘルパーなどでも利用される情報でもあり<br />
大変便利な機能ではあります。<br />
しかし気をつける点があり、「app/config/core.php」内の設定で「Configure::write(&#8216;debug&#8217;, 0);」の設定を<br />
1以上であれば、テーブルの情報を変更しても問題は無いのですが<br />
0を指定(デバック無し)にしてテーブル情報を変更すると、変更したテーブルのフィールド情報が取得されない現象が起こります。<br />
詳しい内容は割愛させていただきますが、まぁあたりまえな話でもあります。</p>
<p>しかし、ここで問題となるのが作成するアプリケーションの機能で、任意のタイミングにテーブル情報を変更するような<br />
動的テーブルが存在するアプリケーション設計に問題が発生するかと思います。<br />
その場合、キャッシュとして保存されたテーブル情報を一度削除をしなければ、変更された状態のテーブル情報を<br />
取得することができなくなり、「find()」などでも問題となってしまいます。</p>
<p>そこで削除する方法を探してみました。<br />
単純にCakePHPには定数の「CACHE」であるキャッシュディレクトリへのパスがあるので<br />
その定数を使って削除する方法がありますが、無駄なコーディングが増えるので<br />
CakePHPの内部を調べてテストしてみたところ発見！1行のコーディングで削除できます。</p>
<p>削除するためのコーディングはこちら</p>
<pre class="brush:php">Cache::delete('ファイル名','_cake_model_')</pre>
<p>ここで注意することは指定する「ファイル名」です。<br />
この名称の指定はキャッシュ機能が「File」エンジンを利用して、設定を変更していない場合は<br />
ファイル名のプレフィックスとして「cake_model_」が自動でつきます。<br />
「ファイル名」の指定は、例えばデータベースへの接続が「default」でテーブル名が「users」の場合は<br />
「ファイル名」を「default_users」となります。</p>
<p>これでテーブルが動的な設定でもCakePHPを問題なく利用できかと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.widget-info.net/2009/10/cakephp_cache_detabase_del/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP　バリデーションの日本語問題</title>
		<link>http://blog.widget-info.net/2009/10/cakephp_validation_jpn/</link>
		<comments>http://blog.widget-info.net/2009/10/cakephp_validation_jpn/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 22:57:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Model]]></category>
		<category><![CDATA[その他]]></category>
		<category><![CDATA[バリデーション]]></category>

		<guid isPermaLink="false">http://blog.widget-info.net/?p=304</guid>
		<description><![CDATA[CakePHPにはバリデーションの機能があります。入力データを任意の方法で正しい入力かどうかをチェックしてくれる機能。。。]]></description>
			<content:encoded><![CDATA[<p>CakePHPにはバリデーションの機能があります。<br />
入力データを任意の方法で正しい入力かどうかをチェックしてくれる機能。。。<br />
大変便利機能で当たり前のように使っていると思いますが、やはり日本語周りがorz</p>
<p>まぁしかたの無いことなのですが、内部のライブラリの状態を見る限りでは<br />
悲しいこと2バイト文字に関しては基本処理されていません。<br />
<span id="more-304"></span></p>
<p>例えば「minLength」というバリデーション方法。<br />
入力文字数の最小数をチェックしてくれるバリデーションですが、<br />
CakePHPの本体のままで利用して例として、最小文字数を2文字以上で<br />
入力させたい場合で入力文字が「あ」と入力されたとします。</p>
<p>普通に考えればバリデーションに引っかかり、入力エラー処理をされますが、<br />
もちろんあっさり通り抜けてしまいます（笑<br />
まぁ内部を見ると簡単。。。2バイト文字は無視です（笑<br />
※厳密には無視では無く、文字数の数え方が違います。</p>
<p>そこでCakePHPの本体を変更せずに、2バイト文字に対応させた<br />
バリデーション方法はないか。。。もちろんバリデーション名も変更せずに。。。</p>
<p>その結果、「app_model.php」に以下の方法で対応できます。</p>
<pre class="brush:php">function minLength($check, $min) {
	$check=(is_array($check))?current($check):$check;
	$length = mb_strlen($check,Configure::read('App.encoding'));
	return ($length &gt;= $min);
}</pre>
<p>既存のバリデーションにオーバロードをさせてしまう方法です。<br />
こうすることで2バイト文字でも正しく文字数を判別することができるようになります。<br />
その他のバリデーションも同じように変更することで2バイト文字のバリデーション対応にすることができます。<br />
といってもあと2つなのでコピペができるようにまとめておきます。</p>
<pre class="brush:php">function minLength($check, $min) {
	$check=(is_array($check))?current($check):$check;
	$length = mb_strlen($check,Configure::read('App.encoding'));
	return ($length &gt;= $min);
}
function maxLength($check, $max) {
	$check=(is_array($check))?current($check):$check;
	$length = mb_strlen($check,Configure::read('App.encoding'));
	return ($length &lt;= $max);
}
function between($check, $min, $max) {
	$check=(is_array($check))?current($check):$check;
	$length = mb_strlen($check,Configure::read('App.encoding'));
	return ($length &gt;= $min &amp;&amp; $length &lt;= $max);
}</pre>
<p>2バイト文字の処理がある場合は注意しておくと無難です（笑</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.widget-info.net/2009/10/cakephp_validation_jpn/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CakePHP　Behaviorのsetup()注意点</title>
		<link>http://blog.widget-info.net/2009/10/cakephp_behavior_setup/</link>
		<comments>http://blog.widget-info.net/2009/10/cakephp_behavior_setup/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 03:59:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Behavior]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Controller]]></category>
		<category><![CDATA[Model]]></category>

		<guid isPermaLink="false">http://blog.widget-info.net/?p=299</guid>
		<description><![CDATA[CakePHPのビヘイビアでの注意点がひとつありましたのでメモとして。。。]]></description>
			<content:encoded><![CDATA[<p>CakePHPのビヘイビアでの注意点がひとつありましたのでメモとして。。。</p>
<p>ビヘイビアの「setup()」を利用する際に注意点がありました。<br />
特に気づかずに第2引数を変数などにセットすると、コントローラー内に<br />
2つ以上モデルが存在し、両方に同じビヘイビアを設定した場合、<br />
その設定が上書きされてしまう恐れがあります。</p>
<p>といってもイマイチな説明ですが（汗<br />
<span id="more-299"></span><br />
CakePHPの1.1から利用して同じ使い方（同じコード）で利用していたということと<br />
その現象になる設計が無かったのが幸いして、発見に至りました（笑</p>
<p>通常は1つのコントローラーに1つのモデルとしてコーディングしていきますが、<br />
設計によっては1つのコントローラーが2つのモデルを利用する場合もあるかと思います。<br />
モデル1対コントローラー1の関係で利用するビヘイビアの設計であればいいのですが<br />
ビヘイビアはモデル多対コントローラー1の考えが基本かと思います。<br />
その例としてコントローラーでは以下の使い方があると思います。</p>
<pre class="brush:php">//コントローラー内のモデル設定で
$uses=array('モデル1','モデル2');</pre>
<p>この場合、それぞれのモデルに1つのビヘイビアをセットしたとし、<br />
「setup()」の第2引数にも何かしらの設定をセットしたとします。<br />
ビヘイビアでは以下のような処理とすると</p>
<pre class="brush:php">function setup(&amp;$model, $config = array()) {
	$this-&gt;config = $config;
}</pre>
<p>ここで問題発生。。。<br />
この場合「モデル1」のビヘイビアの処理を実行しているのに、通常はモデル1に設定されている<br />
ビヘイビアの第2引数が利用されるのに、実際はモデル2の第2引数を利用しようとします。</p>
<p>どうやらCakePHP1.2の途中からビヘイビアの読み込み方が、若干変更されていたみたいですorz</p>
<p>そこで内部を調べた結果の対応策として以下の方法で対処が可能ということが判明しました。</p>
<pre class="brush:php">function setup(&amp;$model, $config = array()) {
	$this-&gt;config[$model-&gt;alias] = $config;
}</pre>
<p>こうするこで、問題なく実行しているモデルの第2引数を参照するようにすることが可能です。<br />
まぁ単純にモデル名で配列化しているというだけにはなります（笑</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.widget-info.net/2009/10/cakephp_behavior_setup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP　paginateの基本</title>
		<link>http://blog.widget-info.net/2009/09/cakephp_paginate/</link>
		<comments>http://blog.widget-info.net/2009/09/cakephp_paginate/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 15:02:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Component]]></category>
		<category><![CDATA[Controller]]></category>
		<category><![CDATA[Helpers]]></category>
		<category><![CDATA[Model]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[paginate]]></category>
		<category><![CDATA[データベース]]></category>

		<guid isPermaLink="false">http://blog.widget-info.net/?p=196</guid>
		<description><![CDATA[CakePHPでは「paginate」（ページング機能）が最初から搭載されています。1.1系では別に用意する必要があったページングが、1.2系では最初から搭載されているのでわざわざコーディングすることなく利用できる]]></description>
			<content:encoded><![CDATA[<p>CakePHPでは「paginate」（ページング機能）が最初から搭載されています。<br />
1.1系では別に用意する必要があったページングが、1.2系では最初から搭載されているので<br />
わざわざコーディングすることなく利用できるのは開発の効率がよくなるものです（笑</p>
<p>さてこの「paginate」（ページング機能）を少し解説していこうかと思います。<br />
といっても自分のメモ的なものもありますが。。。<br />
<span id="more-196"></span><br />
「paginate」（ページング機能）を利用する前に、CakePHPでまず必要な用意はありません（笑<br />
前述したとおり1.2系では最初から利用できるので特別な用意をする必要がありません。<br />
なぜ用意が必要がないかと言うと、必要なものはCakePHP側で先に用意してくれているからです。<br />
例えば、「paginate」（ページング機能）を使うには通常はヘルパーの「Paginator」、ajax化を利用するなら<br />
「ajax」ヘルパーが必要になりますが、CakePHPが各ヘルパーが無いと判断したら、自動で利用できるようになっています。<br />
これは楽です（笑<br />
ではデータベースから取得するにはコントローラーでどう記述するかとなると、<br />
まずは基本は次のようになります。</p>
<pre class="brush:php">$this-&gt;paginate();</pre>
<p>すごく簡単な説明でした（笑<br />
では条件を指定する場合、</p>
<pre class="brush:php">$this-&gt;paginate($conditions);</pre>
<p>またまた簡単です（笑<br />
ここで躓きそうな悩み。。。<br />
モデルを指定していないのに、なぜデータが取得できるか。<br />
それは「paginate」が自動でモデルを内部で処理をし、データベースからデータを取得する<br />
モデルを自動で設定してくれています。<br />
ここでさらに疑問となるのが「Aコントローラー」の「Aモデル」の「paginate」ではなく<br />
「Aコントローラー」から「Bモデル」の「paginate」のデータを取得する場合はどうするのか。</p>
<p>さすがにCakePHPは自動とはいきません（笑<br />
そこで取得するデータのモデルを指定する場合は次のようになります。</p>
<pre class="brush:php">$this-&gt;paginate('取得するモデル名');</pre>
<p>ここで「？」と思う方、はい先ほどの説明でモデルを指定する第1引数には<br />
条件指定を入れている場所でした。<br />
実はCakePHPでは第1引数が文字列の場合は、それをモデル名として処理します。<br />
では条件はどこに記述するのかですが、この場合は第2引数が条件指定の渡しとなります。</p>
<pre class="brush:php">$this-&gt;paginate('取得するモデル名',$conditions);</pre>
<p>これでモデルを指定したり、条件を指定したり自由に「paginate」（ページング機能）を使いこなせると思います。<br />
ちなみに「$conditions」の指定方法は「find」と同じです。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.widget-info.net/2009/09/cakephp_paginate/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CakePHP　「tbtransform」の公開</title>
		<link>http://blog.widget-info.net/2009/09/cakephp_tbtransform_open/</link>
		<comments>http://blog.widget-info.net/2009/09/cakephp_tbtransform_open/#comments</comments>
		<pubDate>Sat, 12 Sep 2009 15:16:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Behavior]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Model]]></category>
		<category><![CDATA[データベース]]></category>

		<guid isPermaLink="false">http://blog.widget-info.net/?p=180</guid>
		<description><![CDATA[CakePHPのビヘイビアで利用できる「tbtransform」を公開します。]]></description>
			<content:encoded><![CDATA[<p>CakePHPのビヘイビアで利用できる「tbtransform」を公開します。</p>
<p>このビヘイビアでは日本語入力を統一させるために<br />
英数字とスペースを対象に半角または全角に自動で変換するためのビヘイビアです。<br />
簡単な作りでもありますので、ビヘイビアの開発の参考になれば幸いです。</p>
<p>公開ページは<a title="tbtransformビヘイビア" href="http://blog.widget-info.net/tbtransform_behavior/">こちら</a>です。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.widget-info.net/2009/09/cakephp_tbtransform_open/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP　モデルのインポート方法</title>
		<link>http://blog.widget-info.net/2009/09/cakephp_model_import/</link>
		<comments>http://blog.widget-info.net/2009/09/cakephp_model_import/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 15:05:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Controller]]></category>
		<category><![CDATA[Model]]></category>
		<category><![CDATA[import]]></category>

		<guid isPermaLink="false">http://blog.widget-info.net/?p=175</guid>
		<description><![CDATA[CakePHPのモデルでアソシエーションしていないモデル、またはアソシエーションが無い他のモデルを使うこともあるかと思います。]]></description>
			<content:encoded><![CDATA[<p>CakePHPのモデルでアソシエーションしていないモデル、<br />
またはアソシエーションが無い他のモデルを使うこともあるかと思います。</p>
<p>アソシエーションをしていれば問題なく使えますが、アソシエーションをしていないモデルや<br />
アソシエーションが無いモデルは、別の方法でモデルを読み込みます。<br />
例えば最初から利用するのであれば、コントローラー内の</p>
<pre class="brush:php">var $uses=array();</pre>
<p>に記述しますが、特定の段階でとなるとこれでは対応できません。<br />
その場合は特定の段階で<br />
<span id="more-175"></span></p>
<pre class="brush:php">App::import('Model','モデル名');</pre>
<p>と記述後</p>
<pre class="brush:php">$this-&gt;モデル名=new モデル名();</pre>
<p>となります。これで使いたいタイミングでモデルを読み込み、そのモデルを<br />
有効に利用することができます。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.widget-info.net/2009/09/cakephp_model_import/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP　「find」の種類</title>
		<link>http://blog.widget-info.net/2009/09/cakephp_find_type/</link>
		<comments>http://blog.widget-info.net/2009/09/cakephp_find_type/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 15:07:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Model]]></category>
		<category><![CDATA[find]]></category>

		<guid isPermaLink="false">http://blog.widget-info.net/?p=171</guid>
		<description><![CDATA[CakePHPでよく使われる「find」。「find」の種類をサクっと紹介します。]]></description>
			<content:encoded><![CDATA[<p>CakePHPでよく使われる「find」。<br />
大変便利でCakePHPでは一般的に使われるデータベースから<br />
データの取得やなにやらまで基本的なものを用意してくれています。</p>
<p>さてその「find」の種類をサクっと紹介します。<br />
<span id="more-171"></span></p>
<p>まず基本。。。<br />
これもよく使う「findAll」。実は「find」で記述することができます。<br />
いまさら実はということでもないですが（笑</p>
<p>記述例は</p>
<pre class="brush:php">$this-&gt;モデル名-&gt;find('all');</pre>
<p>だけです。まぁCakePHP本体を追うとすぐに発見できます。</p>
<p>「all」の指定以外に次のものがあります。</p>
<p>・first<br />
データベースから1件だけデータを取得<br />
よく使う形で置き換えると「read()」<br />
・count<br />
データベースにあるレコード数を取得<br />
よく使う形で置き換えると「findCount()」<br />
・neighbors<br />
指定したレコードの前後のレコードを取得<br />
・list<br />
データベースから「primaryKey」を配列のキー、「displayField」を配列の値の形で<br />
データを取得します。<br />
・threaded<br />
Tree（ツリー）構造でデータベースからレコードを取得</p>
<p>CakePHPで用意されている「find」は以上です。<br />
十分用意されていて至れり尽くせりな感じです（笑）</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.widget-info.net/2009/09/cakephp_find_type/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP　DBからTree（ツリー）構造でSELECT</title>
		<link>http://blog.widget-info.net/2009/09/cakephp_select_tree/</link>
		<comments>http://blog.widget-info.net/2009/09/cakephp_select_tree/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 14:21:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Model]]></category>
		<category><![CDATA[データベース]]></category>

		<guid isPermaLink="false">http://blog.widget-info.net/?p=167</guid>
		<description><![CDATA[CskePHPではDBに保存されているデータをツリー構造で取得することが可能です。]]></description>
			<content:encoded><![CDATA[<p>メモとして。。。</p>
<p>CskePHPではDBに保存されているデータをツリー構造で取得することが可能です。<br />
PHPコードを普通に記述するのは面倒な作業なのに、CakePHPでは基本1行で済んでしまいます（笑）</p>
<p>さて実際の記述は。。。<br />
<span id="more-167"></span></p>
<pre class="brush:php">
$this-&gt;モデル名-&gt;find('threaded');
</pre>
<p>たったこれだけです。簡単ですね（笑<br />
ちなみにデータベース上にはどのデータが親なのかを「parent_id」で紐付けしておく必要があります。</p>
<p>上記のコードで？と思う方、お気づきでしょうか？<br />
はい、通常の「find」の利用では「threaded」の部分には条件指定の配列を入れます。<br />
このコードでは条件指定はできず、動作してくれませんorz</p>
<p>この問題を解消するには。。。<br />
って複雑ではありませんし、実はCakePHPではちゃんと用意されています（汗</p>
<p>通常「find」の第2引数は「field」を指定するのですが、この指定を工夫します。<br />
例えば条件を指定する場合は次のような形です。</p>
<pre class="brush:php">
$field['conditions']['AND']～
</pre>
<p>この「conditions」がCakePHPでは自動で、第1引数に置き換えてくれます。<br />
これで条件指定があるTree（ツリー）構造も簡単にできますね（笑</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.widget-info.net/2009/09/cakephp_select_tree/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
