Подтвердить что ты не робот

Что означает "массовое присвоение" в Ларавеле?

Когда я просмотрел раздел Laravel Document о частичной яркости ORM, я получил новый термин Mass Assignment.

Отображение документа Как выполнить массовое присвоение и настройки свойств fillable или guarded. Но после этого я не знал о Mass Assignment и о том, как это работает.

В моем прошлом опыте в CodeIgniter я также не слышал об этом термине.

Есть ли у кого-то простое объяснение?

4b9b3361

Ответ 1

Массовое назначение - это когда вы отправляете массив в создание модели, в основном устанавливая кучу полей в модели за один раз, а не один за другим, что-то вроде:

$user = new User(Input::all());

(Это вместо того, чтобы явно устанавливать каждое значение в модели отдельно.)

Вы можете использовать fillable для защиты тех полей, которые вы хотите, чтобы это действительно позволяло обновлять.

Скажем, в вашей пользовательской таблице есть поле user_type, которое может иметь значения user/admin

Очевидно, что вы не хотите, чтобы пользователи могли обновлять это значение. Теоретически, если бы вы использовали вышеуказанный код, кто-то мог бы ввести в форму новое поле для user_type и отправить "админ" вместе с другими данными формы и легко переключить свою учетную запись на учетную запись администратора... плохие новости.

Добавив:

$fillable = array('name', 'password', 'email');

Вы гарантируете, что только те значения могут быть обновлены с помощью mass assignment

Чтобы обновить значение user_type, вам необходимо явно установить его на модели и сохранить его, например:

$user->user_type = 'admin';
$user->save();

Ответ 2

Массовое присвоение - это процесс отправки массива данных, которые будут сохранены в указанной модели за один раз. Как правило, вам не нужно сохранять данные в вашей модели по отдельности, а скорее в одном процессе.

Массовое назначение - это хорошо, но за этим стоят определенные проблемы с безопасностью. Что делать, если кто-то передает значение в модель и без защиты может определенно изменить все поля, включая идентификатор. Это не хорошо.

Допустим, у вас есть таблица "студентов", с полями "student_type, first_name, last_name". Возможно, вы захотите массово назначить "first_name, last_name", но вы хотите защитить student_type от непосредственного изменения. Там, где заполняется и охраняется.

Fillable позволяет вам указать, какие поля можно назначить по массе в вашей модели, вы можете сделать это, добавив специальную переменную $fillable в модель. Итак, в модели:

class Student extends Model {
      protected $fillable = ['first_name', 'last_name']; //only the field names inside the array can be mass-assign
} 

'student_type' не включены, что означает, что они освобождены.

Охраняется с обратной стороны. Если в параметре fillable указано, какие поля должны быть назначены по массе, параметр guardiled указывает, какие поля нельзя назначить по массе. Итак, в модели:

class Student extends Model {
      protected $guarded = ['student_type']; //the field name inside the array is not mass-assignable
}

Вы должны использовать либо $ fillable, либо $ guarded - но не оба.

Для более подробной информации откройте ссылку: - Массовое назначение

Ответ 3

Массовое присвоение означает, что вы заполняете строку более чем одним столбцом, используя массив данных. (несколько ярлыка вместо ручного построения массива) с помощью Input::all().

Технически только с головы. Fillable означает, что столбцы в таблице могут быть вставлены, защита означает, что модель не может вставляться в этот конкретный столбец.

Обратите внимание, что при попытке выполнить массовое присвоение с помощью вставьте в столбец с именем "secret", и вы указали, что он защищен, вы можете попробовать вставить его через модель, но это никогда не будет вставьте в базу данных.

Это касается безопасности и защиты вашей таблицы при использовании модели. Массовое назначение кажется просто уведомлением или предупреждением о том, что вы не указали модель, которая заполнена и защищена, и делает ее уязвимой для каких-либо атак.

Ответ 5

Это когда массив полученных данных сразу сохраняется в модели.

Из-за проблем безопасности с этим методом в laravel, он рекомендовал вам определить поля, которые вы хотите, чтобы запрошенные данные заполняли в модели.

Вы можете использовать переменную $fillable чтобы определить поля, которые вы хотите заполнить в таблице базы данных.

Например

Protected $fillable = [‘username, ‘dob, ‘email,];

Когда laravel обнаруживает, что вы массово присваиваете данные, вынуждает вас определять поля, которые вы хотите массово назначить в классе модели.

Кто-то может легко передать ненужные данные в виде HTML в вашу базу данных.