CakePHP3 JSONで出力される日付形式を変更する

PHP

CakePHP3のJSON出力をすると、日付形式が

 "ship_time": "2016-02-16T02:16:00+0900",

というような形式になります。

これって、ISO 8601形式というんですってね。

で、これを違うフォーマットで出力したい…とLocaleだとか、Timeだとか、Configを変更してみても、ダメでした。
( ´ω`X( ´ω`X<ダメーーーーーー!!!!! 下記に情報がありますが、jsonSerializeというメソッドをコントローラーで上書きするとできるらしいです。 (結局試してはいないのですが) http://stackoverflow.com/questions/27870210/how-can-i-make-a-cakephp-3-time-object-remain-consistent-between-ajax-and-php

後で使うかもしれないので、メモです。

CakePHP3 Cannot match provided foreignKey for というエラー

PHP

Offersというテーブルがあり、Packsというテーブルがあります。
PackはOfferをまとめるため、Offers belongs to Packs, Packs has many Offersという関係です。
で、OffersController->indexを参照すると

Cannot match provided foreignKey for “Packs”, got “(pack_id)” but expected foreign key for “()”

というエラー。

??
と思って、Bakeなどしてみると、Packsの方のidがプライマリキーではないので、Viewが焼けない、というエラーが。

Packsの方のidをプライマリキーにしたら、直りました。

CakePHP 静的なページを作る

PHP

CakePHP 静的なページを作る

CakePHP1.2

/views/pages/
の下に、たとえば
kiyaku.ctp
のように作ると、CakePHPのURLがhttp://hogehoge だとして

 http://hogehoge/pages/kiyaku/

でアクセスできます。

コントローラーやアクションを設定しなくて済むので、手軽ですよね。

ちなみに、上記のページには下記のようにリンクを張ることができます。

 <?php echo $this->Html->link(
         '利用規約',
       array('controller'=>'pages',
 	    'action'=>'kiyaku')
 		)
 ?>

CakePHP 関連付けされていないモデルでfindする

PHP

CakePHP 関連付けされていないモデルでfindする

Nutrient(栄養)とFood(食べ物)というモデルがあった場合、何らかの理由があって、hasManyなどの関連付けがあらかじめされていなかったとします。

その場合、nutrients_controller.php内で

 $this->Nutrient->Food->find(
 		'all',
 	array(
 		'conditions' =>  array('Food.name' => rice ))
 		);

などとやっても当然Foodが見つからないので結果が帰ってきません。

そんな時は、一時的にbindModelという関数を利用して関連付けを設定することができます。

 $this->Nutrient->bindModel(
 				array('hasMany'=>array(
 					'Food'=>array(
 						'className'=>'Food'
 							)
 						)
 					)

);

このようにbindModelを設定してからすぐに最初のfindを実行すると、結果が表示されます。

CakePHP 公式 その場でアソシエーションを生成、廃棄
http://book.cakephp.org/1.3/ja/view/1045/%E3%81%9D%E3%81%AE%E5%A0%B4%E3%81%A7%E3%82%A2%E3%82%BD%E3%82%B7%E3%82%A8%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E7%94%9F%E6%88%90-%E5%BB%83

ちなみに、この方法は何らかの理由で関連付けされていないモデルを利用する時のものなので、たとえばFoodにnutrients_idというフィールドがないといけません。

ただ単に、違うモデルを一時利用したい場合は、下記を参照してください。
CakePHP 一時的に違うモデルを利用する

CakePHP 配列をPOSTする

PHP

CakePHP 配列の値をPOSTする

CakePHP 1.3

フォームを作って値をPOSTするとき、配列で値を投げたい場合もあります。
その場合は、次のようにすれば、htmlフォームヘルパーが手伝ってくれて、一番下のHTMLのように出力します。

 <?php 
   echo $form->input('Modelname.0.fieldname');
   echo $form->input('Modelname.1.fieldname');
 ?>
 
 <input type="text" id="Modelname0Fieldname" name="data[Modelname][0][fieldname]">
 <input type="text" id="Modelname1Fieldname" name="data[Modelname][1][fieldname]">

ここまでは、マニュアルサイトと同じです。
http://book.cakephp.org/ja/view/189/Automagic-Form-Elements

変数をnameに入れたい場合は、次のようにします。

 echo $form->input('Modelname.'.$test_id.'
               .field')

隠し項目に配列を入れるのは、次のようにします。

 echo $form->hidden('Modelname.'.$test_id.'
               .field', array('value'=>''値));