RC1に移行したらsaveできない | suzukiのCakePHPブログ

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にモデル名が含まれないことを想定していると思うんだけど…。

どこを探しても同様の問題で悩んでいる人がいないみたいだから、
他では起こっていないんだと思うんですけど、いったい何がいけないんでしょう?

もしお分かりの方がいらっしゃいましたら、
ぜひ教えていただけると有難いです。