gpt4 book ai didi

php - 无法通过 MassAssignment 创建新模型,导致 QueryException Duplicate Entry

转载 作者:可可西里 更新时间:2023-11-01 00:58:30 25 4
gpt4 key购买 nike

我正在学习 Laravel,当我尝试通过 artisan tinker 使用以下代码插入用户时

$user = App\User::create([
'username'=>'johnd',
'first_name'=>'john',
'last_name'=>'doe',
'email'=>'john@doe.com',
'password'=>'thisShouldBeRandom',
'shool_id'=>1,'type'=>'TEACHER'
]);

它抛出这个错误:

Illuminate\Database\QueryException with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '' for key 'username' (SQL: insert into `users` (`first_name`, `last_name`, `type`, `updated_at`, `created_at`) values (john, doe, TEACHER, 2015-12-22 07:12:49, 2015-12-22 07:12:49))'

我的模型是:

namespace App;

use App\School;
use Illuminate\Auth\Authenticatable;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\Access\Authorizable;
use League\Flysystem\Exception;
use URL;

class User extends Model implements AuthenticatableContract,
AuthorizableContract,
CanResetPasswordContract
{
use Authenticatable, Authorizable, CanResetPassword;

/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';

/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['school_id', 'type'];

/**
* The attributes that are NOT mass assignable.
*
* @var array
*/
protected $guarded = ['email', 'password', 'username'];
}

我还注意到错误中它只是试图将以下列插入到 first_namelast_nametypeupdated_at, created_at 当我还在数组中包含 username 时。有什么我想念的吗?

编辑

看起来我必须添加 username, emailfillable 属性中的其余字段,但我认为这可能会成功 unsecure 因为它可以从请求中填充。我认为这更适合公共(public)数据,例如文章、帖子、评论等。我想我会对敏感数据采用不同的方法,但我可能是错的。 再次感谢所有帮助!

P.S. 使用 artisan tinker 进行测试时,请确保在修改代码时关闭实例并重新启动,因为它会保留旧的已编译实例并且看不到您变化。我花了一段时间才意识到,这让我很头疼。

最佳答案

您需要从 $guarded 中删除“用户名”并将其放入 $fillable 中。

$guarded 中使用“用户名”,您将阻止设置该字段。因此,数据库尝试使用空默认值创建/更新字段“用户名”,而碰巧您已经有一行用户名为空(由于相同的错误)。

实际上,从 $guarded 中删除您需要指定的所有列名,并将它们放入 $fillable 中,因为我认为您会想要“电子邮件”和“密码”已创建/更新。

关于php - 无法通过 MassAssignment 创建新模型,导致 QueryException Duplicate Entry,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34410405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com