如何设置一列不能为空字符串? Laravel

时间:2016-07-02 17:58:10

标签: php laravel migration

我想禁止在数据库中保存空用户,并使用空字符串名称,电子邮件,电话。我想测试它。

我的迁移

public function up()
{
    Schema::create('user1s', function (Blueprint $table) {
        $table->increments('id');
        $table->string("name");
        $table->string("email");
        $table->string("phone_number");
        $table->timestamps();
    });
}

的PageController

public function store(Request $request)
{       
        $this->validate($request , [
            'name' =>'required' ,
            'email' =>'required' ,
            'phone_number' =>'required' ,   
            ]);

        $user= new User1;
        $user->name = $request->name;
        $user->email =  $request->email;
        $user->phone_number =  $request->phone_number;

        $user->save();

    return redirect('/thankyou');

}

当我想使用此测试进行测试时,它会在数据库中保存一个空用户并返回错误...... true为false

public function testnonEmptyInput(){

    $user1=New User1;
    $user1->name="";
    $user1->email="";
    $user1->phone_number="";

    $this->assertFalse($user1->save());
}

1 个答案:

答案 0 :(得分:1)

您无法为字符串设置最小长度约束(至少在MySQL中)。

在这里,你可以使用类似的东西通过约束来实现最小长度约束。

 $this->validate($request , [
            'name' =>'required|min:1' ,
            'email' =>'required' ,
            'phone_number' =>'required' ,   
            ]);

如果您坚持无法使用空字符串保存模型,则可以通过模型事件实现 - https://laravel.com/docs/5.0/eloquent#model-events

要添加约束,可以将以下代码添加到User1.php,

protected static function boot()
{
    parent::boot();

    static::saving(function($u) {
      if(empty($u->name)) {
        return false;
      }
    });
}

(我只实现了非空名称的约束。您可以推断相同的实现电子邮件地址和电话号码的约束。)