Como funciona a Atribuição em Massa no Laravel

You are currently viewing Como funciona a Atribuição em Massa no Laravel

O Laravel permite que você use o método create para “salvar” um novo Model usando uma única instrução PHP e passando os atributos em um array.

A instância do Model inserida será retornada a você pelo método. Veja um exemplo:

use App\Models\Flight;

$cliente = Cliente::create([
    'name' => 'Luiz',
    'email' => '[email protected]',
])

No entanto, antes de usar o método de create, você precisará especificar as propriedades que podem ser preenchidas ou que serão protegidas no seu Model.

Essas propriedades são necessárias porque todos os Models do Eloquent são protegidos contra vulnerabilidades de atribuição em massa por padrão.

Uma vulnerabilidade de atribuição em massa ocorre quando um usuário passa um campo de solicitação HTTP inesperado e esse campo altera uma coluna em seu banco de dados que você não esperava.

Por exemplo, um usuário mal-intencionado pode enviar um parâmetro is_admin por meio de uma solicitação HTTP, que é então passada para o método create do seu Model, permitindo ao usuário tornar0se um administrador.

Portanto, para começar, você deve definir quais atributos do Model deseja tornar atribuível em massa. Você pode fazer isso usando a propriedade $fillable no modelo.

Por exemplo, vamos permitir que o atributo name do nosso Model seja atribuído em massa:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Cliente extends Model
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = ['name'];
}

Depois de especificar quais atributos podem ser atribuídos em massa, você pode usar o método create para inserir um novo registro no banco de dados. O método de criação retorna a instância de Model recém-criada:

$cliente = Cliente::create(['name' => 'Luiz']);

Se você já tem uma instância de Model, pode usar o método fill para preenchê-la com um array de atributos:

$cliente = new Cliente();

$cliente->fill(['name' => 'Luiz']);

Veja alguns exemplos de uso dos métodos create e fill em Controllers:

namespace App\Http\Controllers;

use App\Models\Cliente;
use Illuminate\Http\Request;

class ClienteController extends \App\Http\Controllers\Controller
{

    // Exemplo de uso do Médoto create
    public function save(Request $request)
    {
        // Sempre faça a validação dos dados ...
        $validatedData = $request->validate([
            'name' => ['required'],
        ]);

        $cliente = Cliente::create($validatedData);

        return redirect()->to(route("clientes.show", ["cliente" => $cliente]));
    }

    // Exemplo de uso do Médoto update
    public function update(Request $request, Cliente $cliente)
    {
        // Sempre faça a validação dos dados ...
        $validatedData = $request->validate([
            'name' => ['required'],
        ]);

        $cliente::fill($validatedData);
        $cliente->save();

        return redirect()->to(route("clientes.show", ["cliente" => $cliente]));
    }

}

O exemplo acima mostra um uso de uso do método createÉ extremamente recomendado que você faça a validação de qualquer dado que venha dos seus Controllers.

Conclusão

Agora que você conhece o método create e fill pode ganhar velocidade de desenvolvimento de API ou qualquer outra fonte de dados.

Um grade abraço!

Deixe uma resposta