РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
165 of 1392 menu

Атрибут guarded

Атрибут guarded в модели Eloquent определяет поля, которые нельзя заполнять через массовое присваивание. Это работает как "чёрный список" - если поле перечислено в guarded, то оно будет защищено от массового заполнения. Если массив пустой, то все поля доступны для массового присваивания.

Синтаксис

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; class Article extends Model { protected $guarded = ['field1', 'field2']; } ?>

Атрибут guarded определяет массив полей, которые защищены от массового присваивания. Это противоположность атрибуту fillable, который определяет разрешённые поля.

Пример

Давайте защитим поле 'status' от массового заполнения:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; class Article extends Model { protected $guarded = ['status']; } ?>

Теперь попробуем создать статью с массовым присваиванием:

<?php use AppModelsArticle; $data = [ 'title' => 'article 1', 'text' => 'text of article 1', 'status' => 'published' ]; $article = Article::create($data); echo $article->title; echo $article->status; ?>

Результат выполнения кода:

"article 1" ""

Поле 'status' не было заполнено, так как оно защищено атрибутом guarded.

Пример

Защитим несколько полей одновременно:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; class User extends Model { protected $guarded = ['id', 'email', 'password']; } ?>

Попробуем создать пользователя с защищёнными полями:

<?php use AppModelsUser; $data = [ 'name' => 'John Doe', 'email' => 'john@example.com', 'password' => 'secret' ]; $user = User::create($data); echo $user->name; echo $user->email; ?>

Результат выполнения кода:

"John Doe" ""

Поля 'email' и 'password' защищены от массового присваивания.

Пример

Используем пустой массив для разрешения всех полей:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; class Post extends Model { protected $guarded = []; } ?>

Теперь все поля доступны для массового присваивания:

<?php use AppModelsPost; $data = [ 'title' => 'post 1', 'text' => 'text of post 1', 'category' => 'news' ]; $post = Post::create($data); echo $post->title; echo $post->category; ?>

Результат выполнения кода:

"post 1" "news"

Все поля были успешно заполнены, так как атрибут guarded пуст.

Пример

Защитим все поля с помощью специального символа '*':

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; class Comment extends Model { protected $guarded = ['*']; } ?>

Попробуем создать комментарий с защищёнными полями:

<?php use AppModelsComment; $data = [ 'text' => 'comment text', 'user_id' => 1, 'post_id' => 5 ]; $comment = Comment::create($data); echo $comment->text; echo $comment->user_id; ?>

Результат выполнения кода:

"" ""

Все поля защищены, поэтому ни одно значение не было заполнено.

Смотрите также

  • атрибут fillable,
    который определяет разрешённые для массового присваивания поля
  • метод fill,
    который заполняет модель массово с учётом защищённых полей
  • метод forceFill,
    который заполняет модель игнорируя защищённые поля
  • метод create,
    который создаёт новую запись с массовым присваиванием
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить