2010年4月2日金曜日

propelで別名をつけてJOIN

以下のような同じテーブルをJoinして別名を付与する場合

SELECT `order_main`.*, `c1`.*, `c2`.*
FROM `order_main`
INNER JOIN `customer` `c1` ON `order_main`.`customer_id` = `c1`.`id`
INNER JOIN `customer` `c2` ON `c1`.`friend_id` = `c2`.`id`;

----------------------------------------------------------------

$criteria = new Criteria();

$c = clone $criteria;

// 顧客
$c->addAlias( 'c1', CustomerPeer::TABLE_NAME );
$c->addJoin( OrderMainPeer::CUSTOMER_ID, CustomerPeer::alias( 'c1', CustomerPeer::ID ), Criteria::INNER_JOIN );


// 顧客(紹介元)
$c->addAlias( 'c2', CustomerPeer::TABLE_NAME );
$c->addJoin( CustomerPeer::alias( 'c1', CustomerPeer::FRIEND_ID ), CustomerPeer::alias( 'c2', CustomerPeer::ID ), Criteria::LEFT_JOIN );


//---------------------
// カラム設定
//---------------------
// 受注
OrderMainPeer::addSelectColumns( $c );


// 顧客
$c_temp = clone $criteria;
CustomerPeer::addSelectColumns( $c_temp );
foreach( $c_temp->getSelectColumns() as $column )
{
$c->addSelectColumn( CustomerPeer::alias( 'c1', $column ) );
}


// 友達
$c_temp = clone $criteria;
CustomerPeer::addSelectColumns( $c_temp );
foreach( $c_temp->getSelectColumns() as $column )
{
$c->addSelectColumn( CustomerPeer::alias( 'c2', $column ) );
}


//-----------------------------
// 検索実行して結果を取得する
//-----------------------------
$rs = BasePeer::doSelect( $c );
$res = array( );

while( $result = $rs->fetch( ) )
{
$order_main = new OrderMain( );
$order_main->hydrate( $result );
$pos = self::NUM_COLUMNS - self::NUM_LAZY_LOAD_COLUMNS;

$c1 = new Customer();
$c1->hydrate( $result, $pos );
$pos += CustomerPeer::NUM_COLUMNS;

$c2 = new Customer();
$c2->hydrate( $result, $pos );

$c1->setCustomerRelatedByFriendId($c2);

$order_main->setCustomer($c1);

$res[] = $order_main;
}

return $res;

----------------------------------------------------------------

symfony1.4でのBasePeer::doSelect()の返却値は
PDOstatementなので
以前の->next()は使用できない

外部参照制約を宣言してある場合は
Base~Peerのfunction get~RelatedBy~() とかが参考になります

2010年3月31日水曜日

symfony flashが消える・・

symfony1.4でflashの値が削除される現象が発生しました
(他バージョンでは不明)

redirectで遷移した場合には保持できているのに
リンクなどで遷移するとflashが削除されていました

Attributeの値は保持されているので
セッションが切断されていないことはすぐわかったのですが
何故か画面表示後のリンククリックなどでの遷移でのみ発生


なぜ発生するのか過程は調査していませんが
テンプレートにimgタグのリンク先を間違えているためでした


推測ですが
imgのリンク先が誤っていた場合
.htaccessによりフロントコントローラーに処理が渡され
遷移として処理されるためにFlashがクリアされてる予感


※このエラー原因特定までにすごい時間かかりました
'・ω・`)

2010年3月26日金曜日

各キャリアでのマーキーの対応(marquee)

各キャリア毎のマーキー表示について

http://symple.jp/18.html

http://symple.jp/47.html

2010年3月17日水曜日

sfValidatorRegex パターン以外を正常とする

パターンにマッチしないものが正常

new sfValidatorRegex( array('pattern' => '/~/', 'must_match' => false));

must_matchオプションをfalseに設定する

※symfony1.3,1.4のみ有効


2010年3月11日木曜日

symfony 404 Not Found カスタマイズ

http://www.centsys.jp/service/technical_information/symfony/etc/20080517-2.html


symfony で404 not foundを任意のページに変更する。

app/config/setting.yml

default:
.actions:
error_404_module: error
error_404_action: error404Page

2010年3月9日火曜日