CakePHP HABTMのデータをSaveする

PHP

CakePHP hasAndBelongsToMany (HABTM)のデータを保存するときの注意

hasAndBelongsToManyでモデルを作ると、フォームデータからデータを更新したいとき、ちょっとおかしな挙動になります。

関連しているテーブルのデータを、何もデータの更新をしなくても同じデータの内容でUPDATEかINSERTしてしまいます。

UPDATEかINSERTかの違いは、モデルの$hasAndBelongsToManyの設定で

 'unique' => false,

だとUPDATE、

 'unique' => true,

だとINSERT INTO になるようです。

一応、下記のマニュアルサイトにHABTMのデータの保存について記載があります。
ちょっと使いづらいですね・・・。
Saving Related Model Data (HABTM)
http://book.cakephp.org/view/85/Saving-Related-Model-Data-HABTM
関連データはリフレッシュされてしまうみたいですね。

困っている人はいろいろいるようです。
http://groups.google.co.jp/group/cake-php/browse_thread/thread/e5e591195d38e2f3?fwc=1

仕方ないので、他の方法なんとかしましたが、いい、スマートな方法があれば教えてほしいです。

CakePHP CSV出力

PHP

CakePHP CSVファイル出力

ただのリンク集ですが(^_^;

CSV出力を簡単に実装することができます。

CSV helper(英語)
http://bakery.cakephp.org/articles/ifunk/2007/09/10/csv-helper-php5

上記は英語のサイトですが、下記のサイトで日本語で非常に分かりやすく説明してくれています。

CakePHP – CSVダウンロード(エクスポート)機能を実装する『CSV Helper』 まとめ

CakePHP Bakeでエラーが出る

PHP

CakePHP Bakeでエラーが出る

CakePHP 1.3.8

Cakeのcake.batを利用したコンソールからプログラムを自動生成する方法ですが、次のようなエラーが出て、プログラムファイルが作成できない場合があります。
私の場合は、viewファイルがどうしても生成されず、困っていました。

Wrote `/usr/local/zend/apache2/htdocs/***/tests/fixtures/
category_fixture.php`
Bake is detecting possible fixtures..

Warning: dirname() expects parameter 1 to be string, array given in /
usr/local/cake/libs/file.php on line 100

Warning: is_dir() expects parameter 1 to be string, array given in /
usr/local/cake/libs/file.php on line 101

Warning: basename() expects parameter 1 to be string, array given in /
usr/local/cake/libs/file.php on line 102

Notice: Undefined property: File::$table in /usr/local/cake/libs/model/
model.php on line 660

Fatal error: Call to undefined method File::getAssociated() in /usr/
local/cake/console/libs/tasks/test.php on line 311

クラスファイル名に「File」が使えない(つまりテーブル名にfilesとつけてはいけない)というのが原因だったようです。(^_^;

ありがとう、mark!!
http://cakephp.1045679.n5.nabble.com/Error-during-baking-of-model-Fatal-error-Call-to-undefined-method-File-getAssociated-td1331809.html

CakePHP 1.3 フォームの日付入力を日本語ロケールにあわせる

PHP

以下、CakePHP 1.3.8で動作確認した内容になります。

CakePHPで自動生成される日付入力は、英語ロケールになっています。
以下のようにして日本語ロケールに合わせます。

  • Viewの変更

日付入力出力しているコードを、以下のようにYMD形式で出力するように変更します。

 echo $this->Form->input('published_date', array('dateFormat' => 'YMD'));
  • 対訳ファイルの追加

app/locale/jpn/LC_MESSAGES/default.poに下記の対訳データを追加します。

 msgid "January"
 msgstr "1"
 msgid "February"
 msgstr "2"
 msgid "March"
 msgstr "3"
 msgid "April"
 msgstr "4"
 msgid "May"
 msgstr "5"
 msgid "June"
 msgstr "6"
 msgid "July"
 msgstr "7"
 msgid "August"
 msgstr "8"
 msgid "September"
 msgstr "9"
 msgid "October"
 msgstr "10"
 msgid "November"
 msgstr "11"
 msgid "December"
 msgstr "12"