はまりましたよー(^q^)ダウー
返り値が摩訶不思議アドベンチャーでした。
さて、最近アソシエーションをよく使うようになりました。変ったことといえば、データを保存するときのメソッドがsave()
からsaveAll()
に変ったぐらい。
で、ハマった点というのはsaveAll()
の返り値だ。
save()
の返り値はいくつかあるが、保存に成功したときは保存したデータを返してくれる。この認識が落とし穴だった。
同様にsaveAll()
を使ってみて、boolean
しか返らずあせる。
ドキュメントをみても書いていない(多分)。やばいと思いつつソースを確認してみた。
ソースを読む(コメントだけ)
- save()
* @return mixed On success Model::$data if its not empty or true, false on failure
保存に成功したら、Model::$data
が返ってきますよ。で、返り値が空っぽ(empty)か、boolean
のtrue
だったら失敗していますよ。
・・・・(°ω°?(trueなのに失敗とはこれ如何に)
なるほど、そこにfalseはなかったというわけですな。今まで書いた条件分岐はヤバイということに気づきました。。。orz
- saveAll()
* @return mixed If atomic: True on success, or false on failure. * Otherwise: array similar to the $data array passed, but values are set to true/false * depending on whether each record saved successfully.
単純ですね。成功したらtrue
、失敗したらfalse
です。(下は訳せない。。。)
なるほど
なるほどーーーーーーーーーーーーーーーーーーーーーーーーーー!
どうして、同じクラスの中にこんなにも似て違う処理が存在するのかぁ!!!!!
俺には全くわかりませんです!(´;ω;`)ブワッ
ということでまとめ
save()
は失敗してもtrue
が返ってくる場合があるのでbool
で判断するif文は使っちゃだめ
返り値が配列であればおkじゃないでしょうかね。こうしましょう
<?php $postData = $this->request->data; $data = $this->Model->save($postData); if (is_array($data)) { // 保存に成功 } else { // 保存に失敗 }
saveAll()
は単純にbool
で返ってくるので、通常のif文でおk
うむ。。。開発思想がわからん。。。。とりあえずtrueはやっぱりおかしくない?