php-无法通过MassAssignment创建新模型,导致QueryException复制条目
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php-无法通过MassAssignment创建新模型,导致QueryException复制条目,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2362字,纯文字阅读大概需要4分钟。
内容图文
![php-无法通过MassAssignment创建新模型,导致QueryException复制条目](/upload/InfoBanner/zyjiaocheng/682/c8cac61490ca4f06be7c78641e8bfb87.jpg)
我正在学习Laravel,当我尝试通过工匠修补匠在下面的代码中插入用户时
$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_name,last_name,type,updated_at,created_at.我有什么想念的吗?
编辑
看起来我必须在fillable属性中添加用户名,电子邮件和其余字段,但是我认为这可能使其不安全,因为它可以从请求中填充.我认为这对于诸如文章,帖子,评论等公共数据更合适.我想我将对敏感数据采用另一种方法,但是我可能是错的.再次感谢您的所有帮助!
附言使用手工艺修补匠进行测试时,请确保关闭实例并在修改代码时重新启动,因为它保留了旧的编译实例,并且看不到您所做的更改.花了我一段时间才意识到并引起很多头痛.
解决方法:
您需要从$guarded中删除“用户名”,并将其放入$fillable中.
在$guarded中使用’username’可以防止设置该字段.因此,数据库尝试使用empy默认值创建/更新字段“用户名”,并且碰巧您已经有一个具有空用户名的行(由于相同的错误).
实际上,从$guarded中删除所有需要指定的列名,然后将它们放在$fillable中,因为我想您需要创建/更新’email’和’password’.
内容总结
以上是互联网集市为您收集整理的php-无法通过MassAssignment创建新模型,导致QueryException复制条目全部内容,希望文章能够帮你解决php-无法通过MassAssignment创建新模型,导致QueryException复制条目所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。