Laravel雄辩的更新不更新一个字段

时间:2019-04-25 14:11:02

标签: php laravel vue.js eloquent

我正在将Laravel API和VueJS Frontend应用程序一起使用。我发送了axios POST呼叫以及用户放置的有关他自己的一些信息。在后端,我将获取这些数据并更新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字段。我在VueJS端console.log()的响应中,发现zip的值是正确的,并且数据库中zip字段的数据类型也是字符串。

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

对为什么它不起作用有任何想法吗?

2 个答案:

答案 0 :(得分:1)

您需要在相应模型类中添加该字段。

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

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

<?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

答案 1 :(得分:1)

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

因此添加它,它应该看起来像这样:

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

Find documentation here