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


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

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

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

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

4 94

4 ответа:

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

$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", но вы хотите защитить student_type от непосредственного изменения. Вот где fillable и закрытая иметь место.

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

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

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

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

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

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

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

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

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

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

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

обновление

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

или

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