Posted on: August 01, 2025 12:00 PM
Posted by: Renato
Categories: Laravel
Views: 159
Laravel, fill e forceFill
Em Laravel, fill e forceFill são métodos utilizados para atribuir valores a atributos de um modelo, mas com diferentes níveis de proteção contra atribuição em massa. O método fill respeita a propriedade $fillable do modelo, enquanto forceFill ignora essa proteção, permitindo que qualquer atributo seja definido, independentemente de estar ou não na lista $fillable.
fill:
- Proteção contra atribuição em massa: O método
fillé projetado para proteger contra atribuições em massa, onde você tenta definir vários atributos de uma vez. Ele só permite que atributos definidos na propriedade$fillabledo modelo sejam atualizados. - Uso:
fillé usado para atualizar um modelo com base em um array de dados, garantindo que apenas os atributos permitidos sejam modificados. - Exemplo:
Código
$user = User::find(1);
$user->fill([
'name' => 'Novo Nome',
'email' => '[email protected]',
'password' => 'novaSenha', // Este atributo não será atualizado se não estiver em $fillable
]);
$user->save();
Neste exemplo, se $fillable incluir apenas 'name' e 'email', apenas esses campos serão atualizados, ignorando o 'password'.
forceFill:
- Ignora a proteção:
forceFillignora completamente a propriedade$fillable, permitindo que qualquer atributo seja atualizado, mesmo que não esteja definido como preenchível. - Uso:
forceFillé útil quando você precisa definir atributos que não são normalmente permitidos ou quando está lidando com dados que não são seguros e você precisa garantir que eles sejam definidos. - Exemplo:
Código
$user = User::find(1);
$user->forceFill([
'name' => 'Novo Nome',
'email' => '[email protected]',
'password' => 'novaSenha', // Este atributo será atualizado, mesmo que não esteja em $fillable
]);
$user->save();
Neste exemplo, todos os três campos serão atualizados, independentemente da configuração de $fillable.
Em resumo: fill é um método seguro para atualizar modelos, respeitando a propriedade $fillable. forceFill é um método menos seguro que ignora essa proteção, permitindo que qualquer atributo seja definido.
Observação: É crucial ter cuidado ao usar forceFill, pois ele pode expor seu aplicativo a vulnerabilidades de segurança se usado incorretamente.
Mais informações:
The reason is name filed is not fillable in comment model .To Solve this issue you have to add fillable for that field in comment model
protected $fillable = [
'name',
];
If you try to access non fillable field then it will return null.
If don't want to add it in fillable then you can use forceFill.
forceFill: Fill the model with an array of attributes with force mass assignment.
$comment = new comment();
$comment->forceFill(['name' => 'Bob']);
echo($comment->name);
Donate to Site
Renato
Developer