Что означает "массовое задание" в Laravel?

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

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

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

У кого-нибудь есть простое объяснение по этому поводу?

6 ответов

Решение

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

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

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

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

Допустим, в вашей пользовательской таблице есть поле, которое user_type и это может иметь значения пользователя / администратора

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

Добавляя:

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

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

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

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

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

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

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

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 - но не оба.

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

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

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

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

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

ОБНОВИТЬ

Для Laravel 5.x вы можете обратиться к последнему массовому заданию

ИЛИ ЖЕ

Подробное объяснение того, когда использовать заполняемый или охраняемый

This is when an array of data received is saved at once in a model.

Because of the security issues with this method in laravel, it's recommended you define the fields you wish the requested data to populate on the Model.

You can use the $fillable variable to define the fields you want to populate on the database table.

E.g

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

When laravel detects you are mass assigning data, it forces you to define the fields you want to mass assign in the model class.

Someone can easily pass unwanted data into an html form to your database.

      There are two ways to handle this.

Laravel Eloquent provides an easy way to achieve this.
In your model class, add $fillable property and 
specify names of columns in the array like below:

      You can achieve this by adding $guarded property in model class:

      You can either choose $fillable or $guarded but not both.
Другие вопросы по тегам