Метод forceFill
Метод forceFill применяется к модели Eloquent
и позволяет заполнить её атрибуты даже теми полями,
которые объявлены защищёнными в свойстве guarded.
В отличие от метода fill, который учитывает
массив fillable или guarded,
forceFill игнорирует эти ограничения.
Метод принимает массив атрибутов в качестве
единственного параметра и возвращает текущую модель.
Синтаксис
<?php
$model->forceFill(array $attributes);
?>
Пример
Давайте создадим модель User с защищённым
полем 'is_admin' и попробуем заполнить его
с помощью forceFill:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class User extends Model
{
protected $guarded = ['is_admin'];
protected $fillable = ['name', 'email'];
}
?>
<?php
namespace AppHttpControllers;
use AppModelsUser;
class UserController extends Controller
{
public function index()
{
$user = new User();
$user->forceFill([
'name' => 'John Doe',
'email' => 'john@example.com',
'is_admin' => 1
]);
$res = $user->save();
echo $res;
}
}
?>
Результат выполнения кода:
true
Пример
Давайте используем forceFill для обновления
существующей модели, игнорируя защищённые атрибуты:
<?php
namespace AppHttpControllers;
use AppModelsUser;
class UserController extends Controller
{
public function index()
{
$user = User::find(1);
$user->forceFill([
'name' => 'Jane Doe',
'is_admin' => 1
]);
$res = $user->save();
echo $res;
}
}
?>
Результат выполнения кода:
true
Пример
Сравним поведение fill и forceFill
при работе с защищёнными атрибутами:
<?php
namespace AppHttpControllers;
use AppModelsUser;
class UserController extends Controller
{
public function index()
{
$user1 = new User();
$user1->fill([
'name' => 'Alice',
'email' => 'alice@example.com',
'is_admin' => 1
]);
echo $user1->is_admin ?? 'null';
$user2 = new User();
$user2->forceFill([
'name' => 'Bob',
'email' => 'bob@example.com',
'is_admin' => 1
]);
echo $user2->is_admin;
}
}
?>
Результат выполнения кода:
"null"
"1"