酔っぱらいスクリプターの備忘録。よく消える(意味ねぇ
Archive for 2010年3月24日
あれ? Yii Framework触るぜ日記(7.5)
3月 24th
日記というかただの愚痴なんで7.5です。
もしくはbug reportingですかね(・∀・)
CActiveRecode.phpのquery()のトコが気になる。
Yii PHP framework 1.1.0
private function query($criteria,$all=false)
{
$this->beforeFind();
$this->applyScopes($criteria);
$command=$this->getCommandBuilder()->createFindCommand($this->getTableSchema(),$criteria);
return $all ? $this->populateRecords($command->queryAll()) : $this->populateRecord($command->queryRow());
}
だったのが
Yii PHP framework 1.1.1
では
private function query($criteria,$all=false)
{
$this->applyScopes($criteria);
if(empty($criteria->with))
{
if(!$all)
$criteria->limit=1;
$this->beforeFind();
$command=$this->getCommandBuilder()->createFindCommand($this->getTableSchema(),$criteria);
return $all ? $this->populateRecords($command->queryAll()) : $this->populateRecord($command->queryRow());
}
else
return $this->with($criteria->with)->query($criteria,$all);
}
何か色々機能が増えてそうだね♪ って話じゃない。
$this->applyScopes($criteria)を呼ぶタイミングが変わってるんですよ。
$this->beforeFind()の前と後に。
でapplyScopes()は何と言うか、CDbCriteria(よーするにSQLクエリー)の情報を混ぜる役目っぽいのですよ。
新しいバージョン(1.1.1)ではbeforeFind()の前に呼ばれている。
これだと…そう、beforeFind()で条件を指定出来なくない!?
って話。
Yii Framework触るぜ日記(4)でやったshimiSoftDeleteが動いてなくて「あれ?俺、試してなかったっけ?」となっていたんですが…バグじゃね?
念の為にyii-1.1.0で試したらちゃんと動くじゃねーか!
仕様変更とも言えるかもしれないけど…検索条件さわれないbeforeFindに何の意味があるんですか(ノд`)俺の数時間返せ…
Yii PHP framework 1.1.2で修正される事を切に願います。
ってか誰か英語出来る人、本家に聞いてみてほしい(´・ω・`)
追記:速攻
issue見たらあった。。。orz
えー…なんなろこのキモチ(´・ω・`)
追記:one more thing!
えーっと、1.1.2が出るまで自力で修正する人は
CActiveRecode::query()の位置を変えるのと、CActiveFinder::query()の方も変更しないとwith()使った際にアレです。
これでさらに30分は使った。。。