Eloquent在非空字段中不保存任何值

时间:2016-06-29 18:59:59

标签: php laravel eloquent migration

我正在进行迁移,我希望某些字段不可为空。为了方便起见,我将使用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()修饰符的位置在哪里?

3 个答案:

答案 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',
    ],
],