MR.NiNi About Log Tech Graph Memo Books Twitter

About
Log
Tech
Graph
Memo
Books
Twitter

symfonyの小ネタ集

symfony 1.4の小ネタです。
将来的に内容を取りまとめて技術情報の方に持っていく予定です。

アクセス元の記録

意外と便利なアクセス元の記録。
例えばログインが必要なページにアクセスする際、settings.ymlでログイン用モジュール・アクションに自動的に飛びますが、認証後に該当ページに飛ばしたい場合にはログイン用モジュール・アクション側で以下の構文を用いてアクセス元と引数を記録する事が出来ます。

$request->getParameterHolder()->getAll()

上記の構文で拾ったデータをsetAttribute()でattribute_holderに配列変数として保持しておき、ログイン後、redirect()に配列変数をそのまま代入すれば該当ページに引数付きで飛ばす事が出来ます。

$request_value = $this->getUser()->getAttribute('XXXXXX');
$this->getUser()->removeAttribute('XXXXXX');
$this->redirect($request_value);


XXXXXXには任意の変数名(attribute_holder名)を入れます。
ちなみに、「removeAttribute()」では使用済みの変数を削除しております。
なお、boolean modeで検索する場合にはデータベース(テーブル)側で然るべき構成を行なっておく必要がありますので注意して下さい。

別テーブルのデータを取得

Doctrineの機能と関連しますが、参照したテーブルの情報を元に、関連する別テーブルのデータを拾ってくる事が出来ます。
具体的な例としては「コンテンツのテーブルにあるユーザIDから、ユーザテーブルにあるユーザ名を拾ってくる」方法です。

$result->getAccount()->getName()

「getAccount()」はアカウントテーブル「account」を、「getName()」はアカウントテーブルの「name」カラムをそれぞれ参照します。
$resultはDoctrineで拾ってきたデータを格納している変数です。
なお、schema.ymlでテーブル同士(カラム同士)のrelationを正しく記述してモデルファイル等を生成しないと正しく動作しませんのでご注意下さい。

ちなみに、普通に上記の形式でデータを取得すると、都度別テーブルの情報を参照しに行きます。
foreach()を使用して100のエントリを表示する場合、SQLクエリが100回発行される形になりますので、多用する場合はキャッシュを使用するか、参照先を連想配列で一気に取得して添え字を使用してデータを取得した方が効率的です。

boolean modeでの検索

全文検索用です。

$query = Doctrine_Query::create()->from('table t');
$query->where('match (column1) against (? IN BOOLEAN MODE) or match (column2) against (? IN BOOLEAN MODE) ', array($column1 $column2)) ;


「?」には後の配列で指定している変数の内容が順番に入ります。



メモ書きトップに戻る / トップページに戻る