PHP

【CakePHP2.X】モデルのfindメソッドでBETWEENを使う。

めも。

$this->Model->find('all', [
	'conditions' => [
		'Model.col_1 between ? and ?' => [2, 15]
	]
]);

といった感じで指定する。

 

【PHP】nl2br()の逆をする。

いわゆるbr2nl()。

function br2nl($string) {
	return preg_replace('/<br[[:space:]]*\/?[[:space:]]*>/i', "\n", $string);
}

 

【CakePHP2.x】Modelのfind()メソッド後のコールバック処理を適用する。

モデルごとのfind()処理直後に処理をかましたい場合。

モデルに下記のファンクションを定義すれば良い。
※関数のスコープや引数、引数の初期値まで同一でないと動作しないので注意。

例えば下記のような感じ。

class ModelName extends AppModel {
// find実行後、modelのバーチャルフィールドをリセットする
public function afterFind($results, $primary = false) {
	$this->virtualFields = [];
	return $results;
}

}

ここではfind()後に毎回モデルのバーチャルフィールドをリセットしている。
各モデルメソッドから動的にバーチャルフィールドを設定している場合に便利。

 

【PHP】Cookieを削除する。

削除というより時間切れのクッキーを上書きする感じ。
フレームワークばっか使ってると生PHPでの書き方ど忘れするね。

setcookie('cookie_name', '', time() - 1);

1秒でも時間を過ぎてればブラウザが自動的に削除するので上記のような感じでOK。

 

【CakePHP2.x】ビューブロックの使い方まる2

使ったことのない方法を使ってみた。

ビュー側にて$this->start(),$this->end()を使ってみる。

<?php $this->start('hoge'); ?>
<div>びゅーぶろっく。</div>
<?php $this->end(); ?>

たとえば上記のようなhogeブロックをビューに記述したとする。
次にこのブロック内($this->end()が宣言されるまで)の内容を出力したいところで、
$this->fetch(‘hoge’)をechoすると内容が出力される。

便利で簡単だね。

 

【CakePHP2.x】アソシエーションの考え方自分用まとめ。

超絶今更シリーズ。

まずは公式より。

+ hasOne (A hasOne B) Aは1つのBを持っている
+ hasMany (A hasMany B) Aは複数のBを持っている
+ belongsTo (B belongsTo A) BはAに従属している
+ hasAndBelongsToMany(HABTM) (A HABTM B) AとBは複数のそれぞれを持っている

最初の3つはいいとして、問題は最後である。
HABTMは多対多の構造上、AとBを結びつけるABテーブルが必要であり、これがbelongsToの部分となる。
よって下記式が成り立つ。

A HABTM B =
(A hasMany AB) and (B hasMany AB) / (AB belongsTo A) and (AB belongsTo B)

ABテーブル内に、AとBの外部キーを保持している形となる。

 

【PHP】array_diff()を用いる際の注意。

array_diff()は要素の文字列比較なため、要素の中に更に配列をセットしている場合、「string(5) “Array”」として比較されてしまうので注意が必要。

公式にも書いてあるね。

注意:
二つの要素は、(string) $elem1 === (string) $elem2 の場合のみ等しいと見直されます。言い換えると、文字列表現が同じ場合となります。

http://www.php.net/manual/ja/function.array-diff.php

 

【PHP】配列のループ中、最後の要素であるか否かを判定する。

めも。

foreach($rows as $row) {
	if(end($rows) !== $row) {
		// 最後じゃない場合の処理
		echo ',';
	}
}

ループ中にimplode()的なことをやりたい時に便利。