Meu palpite era usar a seguinte sintaxe:
MyModel::all()->delete();
Mas isso não funcionou. Tenho certeza de que é super simples, mas procurei documentação sobre o assunto e não consigo encontrá-la!
O motivo MyModel::all()->delete()
não funciona é porque, all()
na verdade, dispara a consulta e retorna uma coleção de objetos Eloquent.
Você pode fazer uso do método truncado, isso funciona para o Laravel 4 e 5:
MyModel::truncate();
Isso elimina todas as linhas da tabela sem registrar exclusões de linhas individuais.
MyModel::all()->delete()
, useforeach (MyModel::all() as $e) { $e->delete() }
Solução Laravel 5.2+ .
Basta pegar o construtor subjacente com o nome da tabela e fazer o que for. Não poderia ser mais arrumado do que isso.
Solução Laravel 5.6
fonte
Você pode usar
Model::truncate()
se desabilitarforeign_key_checks
(presumo que você use o MySQL).fonte
Eu vi os dois métodos sendo usados em arquivos de sementes.
Mesmo que você não possa usar o primeiro, se desejar definir chaves estrangeiras .
Portanto, pode ser uma boa ideia usar o segundo.
fonte
delete
obviamente não é o mesmo quetruncate
se.Existe uma maneira indireta:
Exemplo:
Informações sobre o construtor de consultas do Laravel: https://laravel.com/docs/5.4/queries
fonte
DELETE FROM users WHERE id LIKE '%%'
que corresponde a todas as linhas da tabela, excluindo tudo.whereIn
método:$itemsAllContentIDs = Item::where('user_id', $userId)->pluck('item_content_id')->all();
ItemsContent::whereIn('id', $itemsAllContentIDs)->delete();
Eu queria adicionar outra opção para aqueles que acessam esse tópico via Google. Eu precisava fazer isso, mas queria manter meu valor de incremento automático que é
truncate()
redefinido. Eu também não queria usarDB::
nada porque queria operar diretamente fora do objeto de modelo. Então, eu fui com isso:Obviamente, a coluna terá que realmente existir, mas em um modelo Eloquent padrão e pronto para uso, a
id
coluna existe e nunca é nula. Não sei se essa é a melhor escolha, mas funciona para meus propósitos.fonte
Model::delete();
realizará a mesma coisa.Model::delete()
lança uma exceçãoNon-static method Illuminate\Database\Eloquent\Model::delete() should not be called statically
, pelo menos no Laravel 5.0.Não fui capaz de usar
Model::truncate()
, pois seria um erro:E infelizmente
Model::delete()
não funciona (pelo menos no Laravel 5.0):Mas isso funciona:
Isso excluirá todas as linhas automaticamente, se você tiver configurado a exclusão suave. Para excluir totalmente todas as linhas, incluindo as excluídas por software, você pode alterar para isso:
fonte
A melhor maneira de realizar essa operação
Laravel 3
parece ser o uso daFluent
interface para truncar a tabela, como mostrado abaixofonte
Você pode tentar este one-liner que preserva exclusões automáticas também:
fonte
solução simples:
fonte
De maneira semelhante à resposta de Travis vignon, eu exigi dados do modelo eloquente e, se as condições estivessem corretas, eu precisava excluir ou atualizar o modelo. Acabei obtendo o campo mínimo e máximo retornado pela minha consulta (caso outro campo fosse adicionado à tabela que atendesse aos meus critérios de seleção) junto com o critério de seleção original para atualizar os campos por meio de uma consulta SQL bruta (como oposta a uma consulta eloquente por objeto na coleção).
Eu sei que o uso de SQL bruto viola a filosofia de código de laravels, mas seria difícil suportar possivelmente centenas de consultas no lugar de uma.
fonte
Pode fazer um para cadalaço também ..
fonte
Solução que trabalha com o Lumen 5.5 com restrições de chaves estrangeiras:
fonte