🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Eloquent

Eloquentとは、PHPフレームワークのLaravelに最初から含まれているORM(Object-relational mapping:オブジェクト関係マッピング)です。

Q&A

解決済

1回答

1120閲覧

laravel save() 更新できない

yamada

総合スコア8

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Eloquent

Eloquentとは、PHPフレームワークのLaravelに最初から含まれているORM(Object-relational mapping:オブジェクト関係マッピング)です。

0グッド

1クリップ

投稿2019/09/14 14:45

以下のコードで、更新が出来ず、困っています

$User = User::firstOrNew(['Id' => $Id]); $form = $request->all(); unset($form['_token']); $User -> fill($form)->save();

環境:laravel5.4

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mikkame

2019/09/15 06:12

どう更新できないのでしょうか - saveしたらエラーがでる →出る場合はエラーを記載してください - saveしているのに、DB上でも更新されない(エラーはでない) - saveしているのに、DB上は更新されるが表示が更新されない 等
yamada

2019/09/15 08:58

- saveしているのに、DB上でも更新されない(エラーはでない) この現象になっています
yamada

2019/09/15 12:46

php artisan tinker でも 更新処理ができないのですが、、 >>> $user = App\User::find(2); => App\User {#775 Id: 2, user_id: 2, user_status: "個人会員", created_at: "2019-08-26 09:01:06", updated_at: "2019-09-14 19:46:53", } >>> $user->user_status = '団体会員'; => "団体会員" >>> $user->save(); => true >>> $user = App\User::find(2); => App\User {#771 Id: 2, user_id: 2, visit_status: "個人会員", created_at: "2019-08-26 09:01:06", updated_at: "2019-09-14 19:46:53", } >>> user_idというのは、別のテーブルの外部キーになっているのですが、 それが関係しているのでしょうか?
mikkame

2019/09/16 05:50

Userのsaveがオーバーライドされていたりはしませんか?
yamada

2019/09/16 06:22

オーバーライドは、していません 更新だけが、うまくいかず、新規のsave()はできます 外部キー(user_id)も外してみましたが、変わらずです
mikkame

2019/09/16 06:25

brginTransactionとかがどこかで書かれている可能性・・・とか あと、savingをフックしてfalseを返す場合はsaveがキャンセルされたりするんですが。 DB::enableQueryLogとDB::getQueryLogで実行されたSQLを確認してみるとか、どうでしょうか
yamada

2019/09/16 10:41

トランザクションも、使用してないです savingをフックしてfalseを返す場合、、このような処理もしてないのですが、、 今回は、 \App\User::where('Id', '=', $id)->update(['user_status' => $request->user_status]); この書き方で逃げることにしました update項目がたくさんあるので、避けたかったのですが、、 ログを出して確認してみました ->save(); の場合 array:1 [▼ 0 => array:3 [▼ "query" => "update `users` set `user_status` = ?, `updated_at` = ? where `id` is null" "bindings" => array:2 [▼ 0 => “個人会員” 1 => "2019-09-16 19:34:07" ] "time" => 0.65 ] ] キーのidがnullになっていました  ->update の場合 array:1 [▼ 0 => array:3 [▼ "query" => "update `users` set `user_status` = ?, `updated_at` = ? where `Id` = ?" "bindings" => array:3 [▼ 0 => “団体会員” 1 => "2019-09-16 19:30:06" 2 => "4" ] "time" => 14.03 ] ] 正しく値がセットされていました
mikkame

2019/09/16 11:27

Userモデルに問題がありそうですね。 Userモデルのコードを記載してもらう事はできますか?
yamada

2019/09/16 12:58

ログを取ったとき、User modelはデフォルトにしていました <?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model {     // }
mikkame

2019/09/17 09:11

うーん・・・ログからみるに、 キーのidがnullっていうのが問題な気がします。 モデルも何も書いてないので問題なさそうな気がするんですが・・・
meshi_s

2019/09/18 08:53

(的外れな記載かもしれまんせが、) モデルでのfillableの設定とか関係してますかね? https://qiita.com/tkt989/items/c2e01ec2fe91ef5f08d2 ※上記ページのコメント欄 ※tinkerの結果をみる限りあまり関係ないとは思いますが… あと、ログでsaveが「id」で、updateが「Id」なのはなんでだろう。
yamada

2019/09/18 11:46

みなさんのご指摘通り、idが原因のような気がします Idが正しいカラム名ですので、
guest

回答1

0

自己解決

Mysqlの
Users tableの定義を変更しました

Id → id

それで解決しました

ありがとうございました

投稿2019/09/18 11:47

yamada

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問