ラベル symfony の投稿を表示しています。 すべての投稿を表示
ラベル symfony の投稿を表示しています。 すべての投稿を表示

2011年1月11日火曜日

メモ:addとaddAND(addOr)の違い

Criteriaでadd指定で条件を指定した場合
同一カラムに指定されていた条件が上書きされる

$c = new Criteria();
$c->add(TablePeer::COLUMN_ALPHA, 'hoge');
$c->add(TablePeer::COLUMN_BETA, 'piyo');
$c->add(TablePeer::COLUMN_BETA, 'foo');

WHERE column_alpha = 'hoge'
AND column_beta = 'foo'

※「column_beta = 'piyo'」の条件が「column_beta = 'foo'」で上書きされる


-------------------------------------------
addAnd(addOr)を使用すると指定されていた条件に対して追加される

$c = new Criteria();
$c->add(TablePeer::COLUMN_ALPHA, 'hoge');
$c->add(TablePeer::COLUMN_BETA, 'piyo');
$c->addAnd(TablePeer::COLUMN_BETA, 'foo');

WHERE column_alpha = 'hoge'
AND column_beta = 'piyo'
AND column_beta = 'foo'

※「column_beta = 'piyo'」の条件に「column_beta = 'foo'」が追加される

2010年10月21日木曜日

propelでdoUpdate

Propelで複数行を条件指定でまとめて更新する場合

UPDATE (テーブル) SET カラム = 値 WHERE (条件)
をPropelで書くときのメモ

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

$update = new Criteria();
$where = new Criteria();

// 更新する内容を設定
$update->add(カラム名1, 値);
$update->add(カラム名2, 値);

// 更新対象を抽出するWhere句
$where->addAnd(カラム名3, 値);
$where->addAnd(カラム名4, 値);

// コネクションを取得
$con = Propel::getConnection(DB名);

// 更新処理
BasePeer::doUpdate($where, $update, $con);


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

Update テーブル
SET カラム名1 = 値, カラム名2 = 値
WHERE カラム名3 = 値
AND カラム名4 = 値

参考URL

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月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日火曜日

2010年3月5日金曜日

ArrayAccess インターフェイス

http://php.net/manual/ja/class.arrayaccess.php

配列としてオブジェクトにアクセスするための機能のインターフェイスです。


widgetSchema 配列と validatorSchema 配列は、
実際にはそれぞれ sfWidgetFormSchema とsfValidatorSchema と呼ばれる特殊なクラスで、
ArrayAccess インターフェイスを実装しています。

2010年3月4日木曜日