以下のコードで、更新が出来ず、困っています
$User = User::firstOrNew(['Id' => $Id]); $form = $request->all(); unset($form['_token']); $User -> fill($form)->save();
環境:laravel5.4
どう更新できないのでしょうか
- saveしたらエラーがでる →出る場合はエラーを記載してください
- saveしているのに、DB上でも更新されない(エラーはでない)
- saveしているのに、DB上は更新されるが表示が更新されない
等
- saveしているのに、DB上でも更新されない(エラーはでない)
この現象になっています
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というのは、別のテーブルの外部キーになっているのですが、
それが関係しているのでしょうか?
Userのsaveがオーバーライドされていたりはしませんか?
オーバーライドは、していません
更新だけが、うまくいかず、新規のsave()はできます
外部キー(user_id)も外してみましたが、変わらずです
brginTransactionとかがどこかで書かれている可能性・・・とか
あと、savingをフックしてfalseを返す場合はsaveがキャンセルされたりするんですが。
DB::enableQueryLogとDB::getQueryLogで実行されたSQLを確認してみるとか、どうでしょうか
トランザクションも、使用してないです
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
]
]
正しく値がセットされていました
Userモデルに問題がありそうですね。
Userモデルのコードを記載してもらう事はできますか?
ログを取ったとき、User modelはデフォルトにしていました
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
//
}
うーん・・・ログからみるに、
キーのidがnullっていうのが問題な気がします。
モデルも何も書いてないので問題なさそうな気がするんですが・・・
(的外れな記載かもしれまんせが、)
モデルでのfillableの設定とか関係してますかね?
https://qiita.com/tkt989/items/c2e01ec2fe91ef5f08d2
※上記ページのコメント欄
※tinkerの結果をみる限りあまり関係ないとは思いますが…
あと、ログでsaveが「id」で、updateが「Id」なのはなんでだろう。
みなさんのご指摘通り、idが原因のような気がします
Idが正しいカラム名ですので、
回答1件
あなたの回答
tips
プレビュー