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


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

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

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

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

Author: dayuloli, 2014-03-09

4 answers

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

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

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

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

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

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

Добавив:

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

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

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

$user->user_type = 'admin';
$user->save();
 136
Author: duellsy, 2014-03-09 09:12:23

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

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

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

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

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

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

Защищенный - это обратная сторона заполняемого. Если заполняемый указывает, какие поля должны быть назначены массово, защищенный указывает, какие поля не могут быть назначены массово. Итак, в модели:

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

Вы должны использовать либо $заполняемый, либо $защищенный - не оба.

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

 5
Author: Udhav Sarvaiya, 2018-04-05 10:12:54

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

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

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

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

 4
Author: majidarif, 2014-03-09 07:32:47

ОБНОВЛЕНИЕ

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

ИЛИ

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

 2
Author: Ikong, 2015-11-24 12:16:11