Когда я перешел к разделу Laravel Document about the Eloquent ORM, я получил новый термин Mass Assignment
.
Отображение документа Как выполнить массовое присвоение и параметры fillable
или guarded
свойства. Но после этого я не имел четкого понимания о Mass Assignment
и о том, как это работает.
В моем прошлом опыте в CodeIgniter я также не слышал об этом термине.
Кто-нибудь имеет простое объяснение по этому поводу?
Массовое присвоение – это когда вы отправляете массив в создание модели, в основном устанавливая кучу полей в модели за один раз, а не один за другим, что-то вроде:
$user = new User(Input::all());
(Это вместо того, чтобы явно устанавливать каждое значение на модели отдельно.)
Вы можете использовать fillable
для защиты полей, которые вы хотите, чтобы это действительно позволяло обновлять.
Скажем, в вашей пользовательской таблице есть поле user_type
которое может иметь значения user / admin
Очевидно, что вы не хотите, чтобы пользователи могли обновлять это значение. Теоретически, если бы вы использовали приведенный выше код, кто-то мог ввести в форму новое поле для user_type
и отправить «admin» вместе с другими данными формы и легко переключить свою учетную запись на учетную запись администратора … плохие новости.
Добавлением:
$fillable = array('name', 'password', 'email');
Вы гарантируете, что только эти значения могут быть обновлены с использованием mass assignment
Чтобы иметь возможность обновить значение user_type
, вам необходимо явно установить его на модели и сохранить его, например:
$user->user_type = 'admin'; $user->save();
Массовое назначение означает, что вы заполняете строку более чем одним столбцом, используя массив данных. (несколько ярлык вместо ручного построения массива) с помощью Input::all()
.
Технически только с головы. Fillable означает, что столбцы в таблице могут быть вставлены, защита означает, что модель не может вставить в этот конкретный столбец.
Обратите внимание, что когда вы пытаетесь выполнить массовое задание с подобным, вставьте в столбец с именем «secret», и вы указали, что он защищен, вы можете попробовать вставить его через модель, но он никогда не будет вставлен в базы данных.
Это касается безопасности и защиты вашей таблицы при использовании модели. Массовое назначение кажется просто уведомлением или предупреждением о том, что вы не указали модель, которая заполнена и защищена, и делает ее уязвимой для каких-либо атак.
ОБНОВИТЬ
Для Laravel 5.x вы можете ссылаться на последнее массовое назначение документа
ИЛИ
Хорошо подробное объяснение того, когда использовать заполняемые или охраняемые