Reputation: 821
I want to forbid that in database is saved empty user ,with an empty string name,email,phone. And I want to test it.
My 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');
}
When I want to test with this test it saves an empty user in database and returns error ...... true is false
public function testnonEmptyInput(){
$user1=New User1;
$user1->name="";
$user1->email="";
$user1->phone_number="";
$this->assertFalse($user1->save());
}
Upvotes: 0
Views: 1115
Reputation: 589
You can not set a minimum length constraint for a string (atleast in MySQL).
Here you can implement a minimum length constraint through the constraints during your validation using something like this.
$this->validate($request , [
'name' =>'required|min:1' ,
'email' =>'required' ,
'phone_number' =>'required' ,
]);
If you insist on not being able to even save a model with an empty string, you can implement that through Model Events - https://laravel.com/docs/5.0/eloquent#model-events
To add the constraint, you can add the following code to User1.php,
protected static function boot()
{
parent::boot();
static::saving(function($u) {
if(empty($u->name)) {
return false;
}
});
}
(I've only implemented the constraints for a non-empty name. You can extrapolate the same for implementing constraints for the email address and phone number.)
Upvotes: 2