Когда я просмотрел документ Laravel по теме Eloquent ORM, у меня появился новый термин Mass Assignment
.
Документ шоу Как сделать массовое назначение и fillable
или guarded
свойство настройки. Но после того, как я прошел через это, у меня не было четкого понимания Mass Assignment
того, как и как это работает.
В моем прошлом опыте в CodeIgniter я также не слышал об этом термине.
У кого-нибудь есть простое объяснение по этому поводу?
php
laravel
mass-assignment
Чен-Цу Лин
источник
источник
Ответы:
Массовое назначение - это когда вы отправляете массив для создания модели, в основном устанавливая кучу полей в модели за один раз, а не одно за другим, что-то вроде:
(Это вместо того, чтобы явно устанавливать каждое значение в модели отдельно.)
Вы можете использовать
fillable
для защиты, какие поля вы хотите, чтобы это на самом деле разрешало обновление.Вы также можете заблокировать массовое назначение всех полей, выполнив это:
Допустим, в вашей пользовательской таблице у вас есть поле,
user_type
которое может иметь значения user / adminОчевидно, вы не хотите, чтобы пользователи могли обновлять это значение. Теоретически, если вы использовали приведенный выше код, кто-то может ввести в форму новое поле для
user_type
и отправить «admin» вместе с другими данными формы, и легко переключить свою учетную запись на учетную запись администратора ... плохие новости.Добавляя:
Вы гарантируете, что только эти значения могут быть обновлены с помощью
mass assignment
Чтобы иметь возможность обновить
user_type
значение, вам необходимо явно установить его в модели и сохранить, например, так:источник
$user = new User(Input::all());
(как программист), что это так бесконтрольно (или в каком сценарии это будет полезно).$user = new User; $user->name = 'Neo';
Массовое присвоение - это процесс отправки массива данных, которые будут сразу сохранены в указанной модели. Как правило, вам не нужно сохранять данные в вашей модели по отдельности, а скорее в одном процессе.
Массовое назначение - это хорошо, но за этим стоят определенные проблемы с безопасностью. Что, если кто-то передает значение в модель и без защиты он может определенно изменить все поля, включая идентификатор. Это не хорошо.
Скажем , у вас есть таблица "студенты, с полями «student_type, first_name, last_name» . Вы можете массовый правопреемник„first_name, last_name“ , но вы хотите , чтобы защитить student_type от того , непосредственно изменились. Вот где заливка и охранял место.
Fillable позволяет вам указать, какие поля можно назначить по массе в вашей модели, вы можете сделать это, добавив специальную переменную
$fillable
в модель. Итак, в модели:' student_type ' не включены, что означает, что они освобождены.
Охраняется с обратной стороны. Если в параметре fillable указано, какие поля должны быть назначены по массе, параметр guardiled указывает, какие поля нельзя назначить по массе. Итак, в модели:
Вы должны использовать либо $ fillable, либо $ guarded - но не оба.
Для более подробной информации откройте ссылку: - Массовое назначение
источник
Массовое присвоение означает, что вы заполняете строку несколькими столбцами, используя массив данных. (что-то вроде ярлыка вместо ручного построения массива) с помощью
Input::all()
.Технически только с макушки головы. Заполняемый означает, что столбцы в таблице разрешено вставлять, защищенный означает, что модель не может вставить в этот конкретный столбец.
Обратите внимание, что когда вы пытаетесь выполнить массовое назначение с помощью like, вставить в столбец с именем «secret» и указали, что он защищен, вы можете попытаться вставить его через модель, но он никогда не будет вставлен в база данных.
Это для безопасности и защиты на вашем столе при использовании модели. Массовое назначение - это просто уведомление или предупреждение о том, что вы не указали модель, которую можно заполнить и защитить, и делает ее уязвимой для каких-либо атак.
источник
Это когда массив полученных данных сразу сохраняется в модели.
Из-за проблем безопасности с этим методом в laravel, рекомендуется определить поля, которые вы хотите, чтобы запрошенные данные заполняли в Модели.
Вы можете использовать
$fillable
переменную для определения полей, которые вы хотите заполнить в таблице базы данных.Например
Когда laravel обнаруживает, что вы массово присваиваете данные, вынуждает вас определять поля, которые вы хотите массово назначить в классе модели.
Кто-то может легко передать ненужные данные в виде HTML в вашу базу данных.
источник