php “将[名称]添加到可填充属性,以允许在[Illuminate\Foundation\Auth\User]上进行质量分配,”

hivapdat  于 2023-03-11  发布在  PHP
关注(0)|答案(8)|浏览(159)

php代码,在这里,无论我使用fillable或gaurded,我得到相同的错误.

<?php

namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    /**
     * The attributes that are mass assignable.
     *
     *@var array
     */
    // protected $fillable = [
    //     'name',
    //     'email', 
    //     'password',
    // ];
    
    protected $guarded = [];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

php代码,在这里,我试过批量赋值

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use Illuminate\Foundation\Auth\User;
use Illuminate\Database\Eloquent\Model;



class UserController extends Controller
{
    public function index()
    {
        $data = [
            'name' => 'elon',
            'email' => 'elon@gmail.com',
            'password' => 'password',
        ];

        User::create($data);

        $user = User::all();
        return $user;
    }
}
yhived7q

yhived7q1#

您似乎没有从UserController.php中正确的名称空间导入用户类
您正在使用

use Illuminate\Foundation\Auth\User;

用途

use App\Models\User;

而不是。
编辑:
$fillable在这种情况下不是问题,因为$guarded被设置为一个空数组,允许所有字段都可以通过create方法进行批量赋值。

wribegjk

wribegjk2#

提供的代码中存在两个问题:
1.正如@sta所评论的,应该通过使用User类中的$fillable属性来允许Model属性被批量赋值:

<?php

namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    /**
     * The attributes that are mass assignable.
     *
     *@var array
     */
     protected $fillable = [
         'name',
         'email', 
         'password',
     ];
    
    protected $guarded = [];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

1.正如@雷米所评论的,我们应该确保使用正确的class

<?php

namespace App\Http\Controllers;

use App\Models\User; // <-- corrected line

use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use Illuminate\Database\Eloquent\Model;

class UserController extends Controller
{
    public function index()
    {
        $data = [
            'name' => 'elon',
            'email' => 'elon@gmail.com',
            'password' => 'password',
        ];

        User::create($data);

        $user = User::all();
        return $user;
    }
}
jqjz2hbq

jqjz2hbq3#

我发现这对我在laravel 8中很有帮助,这在所有版本中都很好用,因为很多时候如果我们导入类,它会自动导入另一个,所以请检查您导入的是这个类还是另一个类。

use App\Models\User;
dba5bblo

dba5bblo4#

UserController.php中尝试使用

use App\Models\User;
gkl3eglg

gkl3eglg5#

在laravel7中,这对我很有效:

use App\User;
mpgws1up

mpgws1up6#

对我来说,我不得不用ctrl + c停止终端中的服务器,然后用php artisan serve重新启动服务器。

a64a0gku

a64a0gku7#

在我的模型中加入这个
受保护$受保护= [];
它把我从痛苦中解救出来谢谢!

ldfqzlk8

ldfqzlk88#

在Laravel 9中,您可以通过以下步骤解决此问题:
1.打开位于app/Models/User.php的用户模型文件。
1.在模型中找到$fillable属性。
1.将_token添加到可填充属性数组中。$fillable属性应如下所示:
protected $fillable = [ '名称','电子邮件','密码','_令牌',];
1.将更改保存到用户模型文件。通过此更改,您现在可以使用批量分配来设置用户模型上的_token属性。
请注意,将_token添加到$fillable属性可能会带来安全隐患,因此请确保了解风险并采取适当的措施来保护应用程序。

相关问题