为什么在Laravel 5.8中更新或保存(update or save())无法正常工作?

3

我在尝试更新表格(从我的React Native应用程序到Laravel),但总是出现错误。这是我的获取方式:

fetch("http://192.168.2.45/backend/public/api/checkuser", {
      method: "POST",
      body: JSON.stringify(user),
      headers: new Headers({
        "Content-Type": "application/json"
      })
    })

我的Laravel API:

Route::post('update','mainController@update');

 public function update(Request $request)
    {

        $email = $request->email;


        $error_message="DENIED";
        $Success = "Success";


       if (user::where('email', '=',$email)->count() > 0) {
        $user = user::where('email', '=',$email);
        $user->image_name = $request->email;
        $user->save()--->
      here i get my error
      ( i have also tried where(....)->update(....)
      and i get the same error)
          return response()->json(['message' => $Success]);
         }else{
           return response()->json(['message' => $error_message]);
       }
   }

发布您的错误。 - Casey Anderson
请指明错误。 - Pedro Monteiro
我收到的错误信息是:''console.error:''error:",{"line":22855",column":16",sourceURL":"http://localhost:8081/index.delta?platform=android&dev=true&minify=false"},这是我在编写Laravel PHP文件时每次写错时都会出现的相同错误...我认为Laravel由于某些原因无法识别save()、update()等方法...(顺便说一句,谢谢你的回复) - Vagtse
2个回答

4

当你使用where时,返回的结果是一个查询构建器,而不是用户模型上可以调用CRUD操作的项目。因此,你应该获取返回的结果并对其进行保存,所以将你的代码块替换为以下内容:

if ($user = user::where('email', $email)->first()) {

    $user->image_name = $email;

    $user->save();

    return response()->json(['message' => $Success]);
}
// no need for an else block

return response()->json(['message' => $error_message]);

如果没有找到记录,first() 会返回 null,表示条件为 false,然后它将返回您的错误消息;如果找到记录,则会将您的 image_name 更新为电子邮件。(这似乎没有什么意义,但这是您的代码)


请您能否将您所遇到的错误粘贴并在此评论,因为我无法理解出现了什么问题? - nakov
这完全没有帮助。我只是好奇你如何测试用户是否正确?如果可以,请在tinker中尝试执行相同的步骤。使用电子邮件地址获取第一个用户,将image_name更改为电子邮件,并对其进行保存,看看是否返回错误。 - nakov
是的...我觉得我开始明白发生了什么了...通过 Tinker 运行代码时出现的错误是(Illuminate/Database/QueryException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'id' in 'where clause' (SQL: update users set image_name = G, users.updated_at = 2019-06-05 00:41:50 where id is null))。 - Vagtse
但问题是我不使用用户表,而是创建了“用户”表。 - Vagtse
所以,如果您的模型中没有 id 列,您需要将模型上的 primaryKey 替换为其他字段,例如电子邮件。因此,请在您的模型中添加以下代码:protected $primaryKey = 'email'; - nakov
显示剩余11条评论

0

更改查询。您的搜索未返回结果。

$user = user::where('email', $email)->first();
if(isset($user))
{
$user->image_name = $email;
$user->save();
return response()->json(['message' => $Success]);
}
else
return response()->json(['message' => $error_message]);

我的错误在于我在用户模型中没有加入以下命令:(protected $primaryKey = 'email'; protected $table = "users"; public $timestamps = false;),但还是感谢。 - Vagtse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接