【问题标题】:Laravel Eloquent update not updating one fieldLaravel Eloquent 更新不更新一个字段
【发布时间】:2019-09-15 00:10:37
【问题描述】:

我正在使用 Laravel API 和 VueJS 前端应用程序。我发送axiosPOST 电话以及用户提供的一些关于他自己的信息。在后端,我获取该数据并更新 MySQL 数据库中的用户记录。

这是我的后端代码:

$user = User::where(['logintoken' => $request->login_token, 'remember_token' => $request->remember_token])->first();
            if (!$user) {
                $status = 404;
                $response = ['status' => false, 'message' => 'User not found.'];
            } else {
                $affectedRows = $user->update([
                    'country' => $request->input('country'),
                    'city' => $request->input('city'),
                    'state' => $request->input('state'),
                    'dob' => $request->input('dob'),
                    'language' => $request->input('language'),
                    'street' => $request->input('street'),
                    'house' => $request->input('house'),
                    'avatar' => $request->input('avatar'),
                    'birthplace' => $request->input('birthplace'),
                    'type' => $request->input('userType'),
                    'bio' => $request->input('bio'),
                    'zip' => $request->input('zip'),
                    'has-completed-profile' => 1
                ]);
                if (!$affectedRows) {
                    $response = ['status' => false, 'message' => 'Error updating'];
                    $status = 500;
                } else {
                    $response = ['status' => true, 'message' => 'User updated successfully', 'updated_record' => $user, 'request' => $affectedRows, 'zip' => $request->input('zip')];
                }
            }

现在,这段代码运行良好,只是它没有更新zip 字段。我console.log() VueJS 端的响应,我看到zip 值是正确的,并且数据库中zip 字段的数据类型是字符串。

不过,这不适用于zip 列。当我创建 users 迁移时,没有 zip 列,但一段时间后,当我需要它时,我创建了另一个迁移并使用它来更改表以插入 zip 字段。

知道为什么它不起作用吗?

【问题讨论】:

  • 您需要将该列添加到它的模型类中
  • 您是否在User 模型中使用空的$guarded 数组?或者,如果您使用 $fillable,则需要在允许的字段数组中添加 zip
  • 尝试Log::info($request->all()); 并检查/storage/logs 中的日志以验证zip 是否正在传递到请求中。
  • @RahulMeshram 是的,忘记这一点我是个笨蛋!您应该将其添加为答案,哈哈。
  • 你能否分享 .blade 视图代码以及@nakvov 提到的,验证 zip 是否列在 $fillable 中?

标签: php laravel vue.js eloquent


【解决方案1】:

您需要在 Respective Model 类中添加该字段。

这应该可以解决您的问题。

$fillable 用作应可批量分配的属性的“白名单”。因此,要开始使用,您应该定义要使质量可分配的模型属性。您可以使用模型上的$fillable 属性来执行此操作。例如,让我们将User 模型的zip 属性设为可批量赋值:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = ['zip', // your rest column names];
}

这个例子应该可以帮助你解决问题。

这里是documentation

【讨论】:

  • 那么如何在控制器中添加值呢?
  • 如果你有实体模型,那么为什么要在控制器中使用它。?
【解决方案2】:

您可能在您模型的$fillable 中错过了zip

所以添加它,它应该是这样的:

protected $fillable = [
        'country', 'city', 'state', 'dob', 'language', 'street', 'house', 'avatar', 'birthplace', 'type', 'bio', 'zip', 'has-completed-profile'
    ];

Find documentation here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-30
    • 2020-04-19
    • 2013-01-30
    • 2014-05-06
    • 2012-08-29
    • 1970-01-01
    • 2017-09-19
    • 2014-07-19
    相关资源
    最近更新 更多