Атрибут fillable
Атрибут fillable в моделях Laravel определяет список полей, которые могут быть заполнены через методы массового присвоения, такие как create или update, а также через передачу массива в конструктор модели. Это защита от массовой уязвимости, когда злоумышленник может передать неожиданные поля в запросе. Если поле не указано в fillable, то оно будет проигнорировано при массовом присвоении.
Синтаксис
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class Article extends Model
{
protected $fillable = [
'title',
'content',
'status',
];
}
?>
Пример
Давайте создадим модель Article с разрешёнными полями для массового присвоения:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class Article extends Model
{
protected $fillable = [
'title',
'content',
'status',
];
}
?>
Теперь попробуем создать запись через метод create, передав массив данных:
<?php
use AppModelsArticle;
$article = Article::create([
'title' => 'article 1',
'content' => 'text 1',
'status' => 'published',
'views' => 100,
]);
echo $article->title;
?>
Результат выполнения кода:
"article 1"
Поле 'views' было проигнорировано, так как его нет в fillable.
Пример
Обновление записи через метод update с использованием массового присвоения:
<?php
use AppModelsArticle;
$article = Article::find(1);
$article->update([
'title' => 'updated article',
'content' => 'new text',
]);
echo $article->title;
?>
Результат выполнения кода:
"updated article"
Пример
Использование массового присвоения через конструктор модели:
<?php
use AppModelsArticle;
$article = new Article([
'title' => 'article 2',
'content' => 'text 2',
'status' => 'draft',
]);
$article->save();
echo $article->title;
?>
Результат выполнения кода:
"article 2"