我想禁止在数据库中保存空用户,并使用空字符串名称,电子邮件,电话。我想测试它。
我的迁移:
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());
}
答案 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;
}
});
}
(我只实现了非空名称的约束。您可以推断相同的实现电子邮件地址和电话号码的约束。)