What is Fillable Attribute in a Laravel model?
The fillable property is used inside the model. It takes care of defining which fields are to be considered when the user will insert or update data.
Only the fields marked as fillable are used in the mass assignment. This is done to avoid mass assignment data attacks when the user sends data from the HTTP request. So the data is matched with the fillable attributes before it is inserted into the table.
To understand fillable attributes let us create a model as shown below
php artisan make
:
model
Student
C
:
\xampp\htdocs\laraveltest
>
php artisan make
:
model
Student
Model
created successfully
.
C
:
\xampp\htdocs\laraveltest
>
Now let us create a studentController using command −
php artisan make
:
controller
StudentController
C
:
\xampp\htdocs\laraveltest
>
php artisan make
:
controller
StudentController
Controller
created successfully
.
C
:
\xampp\htdocs\laraveltest
>
The model class for student is as follows −
<?php
namespace
App
\
Models;
use
Illuminate
\
Database\
Eloquent\
Factories\
HasFactory;
use
Illuminate
\
Database\
Eloquent\
Model;
class
Student
extends
Model
{
use
HasFactory
;
}
Let us add the fillable attribute with field names as shown below
<?php
namespace
App
\
Models;
use
Illuminate
\
Database\
Eloquent\
Factories\
HasFactory;
use
Illuminate
\
Database\
Eloquent\
Model;
class
Student
extends
Model
{
use
HasFactory
;
protected
$fillable
=
[
'name'
,
'email'
,
'address'
]
;
}
Let us use the create method in StudentController as shown below −
<?php
namespace
App
\
Http\
Controllers;
use
Illuminate
\
Http\
Request;
use
App
\
Models\
Student;
class
StudentController
extends
Controller
{
public
function
index
(
)
{
echo
$student
=
Student
::
create
(
[
'name'
=>
'Rehan Khan'
,
'email'
=>
,
'address'
=>
'Xyz'
]
)
;
}
}
On executing the above code it will display the following on the browser.
{"name":"Rehan Khan","email":"[email protected]","address":"Xyz","updated_at":"2022-05-01T13:49:50.000000Z","created_at":"2022-05-01T13:49:50.000000Z","id":2}
Inside the model it is mandatory to assign the field as either fillable or guarded. If not, following error will be generated –
Illuminate\Database\Eloquent\MassAssignmentException Add(name) to fillable property to allow mass assignment on [App\Models\Student]. http://127.0.0.1.8000/test
Advertisements