RC1に移行したらsaveできない
RC1がついにリリースされました。
すぐに移行してみたらトラブル発生!
saveができなくなったorz
Google先生や、フォーラムを見ても解決策は無く、
恐らく他の人は困ってないんだと思うけれども、
うちではどうやってもsaveできない…。
で、原因はmodelのgetColumnTypeにあるようなのでチェック。
結論から言うと、引数で渡される$columnにモデル名が含まれていないために、
if (strpos($column, '.')) {
list($model, $column) = explode('.', $column);
}
を通らず$modelがNullのまま
if ($model != $this->alias && isset($this->{$model})) {
return $this->{$model}->getColumnType($column);
}
の処理が走り、
if文の$this->{$model}が$this->Nullというおかしなことになってエラーになることがわかった。
(これって$columnがモデル名を含まずフィールド名だけだったらエラーになりますよね?ね?)
だったら$this->{$model}を$modelにしちゃえ!ってな乱暴なことをしたら、
model->delが効かなくなっちゃったので、
if (isset($model)) { // このif文を勝手に追加
if ($model != $this->alias && isset($this->{$model})) {
return $this->{$model}->getColumnType($column);
}
}
とりあえずこんな感じに修正しました。
getColumnTypeのソースを読むと、
まず$modelにnullを代入してから、わざわざif文でstrpos($column, '.')をチェックして$modelに代入してるから、
$modelにモデル名が含まれないことを想定していると思うんだけど…。
どこを探しても同様の問題で悩んでいる人がいないみたいだから、
他では起こっていないんだと思うんですけど、いったい何がいけないんでしょう?
もしお分かりの方がいらっしゃいましたら、
ぜひ教えていただけると有難いです。