我正在进行迁移,我希望某些字段不可为空。为了方便起见,我将使用Laravel附带的用户迁移作为示例。
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
它的所有字段都不是nullables但是如果我做的话:
$user = new User();
$user->save();
User::all();
返回
Illuminate\Database\Eloquent\Collection {#639
all: [
App\User {#640
id: "1",
name: "",
email: "",
created_at: "2016-06-29 15:51:01",
updated_at: "2016-06-29 15:51:01",
},
],
}
如果我可以在非空字段中保存没有数据的记录,那么nullable()修饰符的位置在哪里?
答案 0 :(得分:3)
嗯,它们是空的,但它们不是空的 - 正如预期的那样。要避免空条目,您必须使用验证规则来强制执行:
在控制器中:
public function store(Request $request)
{
$this->validate($request, [
'name' => 'required|min:4',
'email' => 'required|email',
'password' => 'required|min:8',
]);
$user = User::create($request->only('name', 'email', 'password'));
return redirect()->route('users.show', $user->id);
}
答案 1 :(得分:1)
我认为VARCHAR
字段的默认值为“”。 string
的{{1}}生成Blueprint $table
column。
如果您想设置无可空列,请使用varchar
->nullable(false)
答案 2 :(得分:0)
要解决这种情况,请将这些行放在文件 /config/database.php 中
'mysql' => [
'driver' => 'mysql',
...
'modes' => [
'STRICT_ALL_TABLES',
],
],