我刚刚从MAMP安装切换到本机Apache,MySql和PHP安装.我已经完成了所有工作,但我已经开始在新环境中使用我的Web应用程序,突然任何INSERT命令都会导致以下错误:
SQLSTATE [HY000]:常规错误:1364字段'display_name'没有默认值
看来我现在无法将领域留空.我使用的是MySql 5.6.13版
有没有办法在MySql中更改此设置?
小智 132
MySQL最有可能处于STRICT模式.
尝试运行SET GLOBAL sql_mode=''或编辑my.cnf以确保您没有设置STRICT_ALL_TABLES等.
cal*_*nai 17
MySQL最有可能处于STRICT模式状态,这不一定是坏事,因为你会尽早识别错误/问题,而不是盲目地认为一切都按预期工作.
将列更改为允许null:
ALTER TABLE `x` CHANGE `display_name` `display_name` TEXT NULL
Run Code Online (Sandbox Code Playgroud)
或者,将其作为空字符串赋予默认值:
ALTER TABLE `x` CHANGE `display_name` `display_name` TEXT NOT NULL DEFAULT ''
Run Code Online (Sandbox Code Playgroud)
小智 9
所有这些答案都是一个很好的方法,但我认为您不想总是转到您的数据库并修改您设置为NULL的默认值.我建议你去app/User.php并修改受保护的$ fillable,这样它就会把你新的字段用在用于注册的数据数组中.假设你添加一个名为"first_name"的新输入字段,你的$ fillable应该是这样的:protected $ fillable = ['first_name','email','password',]; 这样做对我来说.祝好运!
我也遇到了这个问题,在laravel中有两种解决方法。
第一个是可以将默认值设置为null。我会给你看一个例子:
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('gender');
$table->string('slug');
$table->string('pic')->nullable();
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
Run Code Online (Sandbox Code Playgroud)如上例所示,您可以nullable()为该功能进行设置。然后在插入数据MySQL时将默认值设置为null。
第二个是在模型中在protected $fillable字段中设置输入字段。例如:
protected $fillable = [
'name', 'email', 'password', 'slug', 'gender','pic'
];
Run Code Online (Sandbox Code Playgroud)我认为第二个比第一个还好,并且您可以同时设置可为空的功能和可填充的功能,而不会出现问题。
| 归档时间: |
|
| 查看次数: |
120783 次 |
| 最近记录: |