
Importando Dados de um Arquivo CSV para o PostgreSQL Usando PDO::pgsqlCopyFromArray no Laravel
O método PDO::pgsqlCopyFromArray permite copiar dados de um array diretamente para uma tabela no PostgreSQL. Este tutorial mostra como usar... Leia mais
Desenvolvedor de Software
O updateOrCreate()
é um dos métodos mais utilizados no Eloquent para garantir que registros sejam atualizados ou criados sem duplicações. Porém, muitos desenvolvedores (inclusive os mais experientes) acabam caindo numa armadilha silenciosa: o uso de campos NULL
— especialmente o deleted_at
— na cláusula de condição.
Se você já escreveu algo assim:
Model::updateOrCreate([
'user_id' => $id,
'deleted_at' => null,
], [...]);
⚠️ Pare agora. Isso não funciona como você pensa.
O updateOrCreate()
do Eloquent traduz internamente o array de condições em comparações simples =
. Então quando você faz 'deleted_at' => null
, o Laravel não gera um WHERE deleted_at IS NULL
, e sim:
WHERE deleted_at = null
O problema? Em SQL, = NULL
nunca é verdadeiro. O resultado é que:
Nenhum registro é encontrado,
Eloquent presume que precisa criar um novo,
E você acaba com registros duplicados, mesmo que pareça que está fazendo tudo certo.
$registro = Model::where('user_id', $id)
->whereNull('deleted_at')
->first();
if (!$registro) {
$registro = new Model();
$registro->user_id = $id;
}
$registro->campo1 = 'valor';
$registro->campo2 = 'valor';
$registro->save();
Agora sim, a consulta IS NULL
funciona corretamente, e você evita duplicações silenciosas.
Mesmo com a lógica certa no código, ainda é possível cometer erros. Garanta unicidade no banco com índices condicionais:
CREATE UNIQUE INDEX idx_user_unico
ON minha_tabela (user_id)
WHERE deleted_at IS NULL;
O método updateOrCreate
é poderoso, mas não foi feito para lidar com NULL
em comparações de forma transparente. Use whereNull()
quando necessário e, se possível, complemente com um índice único no banco de dados.
O método PDO::pgsqlCopyFromArray permite copiar dados de um array diretamente para uma tabela no PostgreSQL. Este tutorial mostra como usar... Leia mais
No mundo da programação PHP, compreender o conceito de variáveis de variáveis e o uso de referências é fundamental para... Leia mais
Desenvolver WordPress localmente com Docker é uma maneira eficiente de criar e testar plugins, temas e personalizações. Neste artigo, vamos... Leia mais
Enviar mensagens de email é uma parte essencial de muitas aplicações web, e o Laravel, um popular framework PHP, torna... Leia mais