Cake\ORM\
Table
Cake\ORM\Table::
delete
(Entity $entity, $options = [])¶Depois que você carregou uma entidade, você pode excluir ela chamando o o método delete da tabela de origem:
// Num a controller.
$entity = $this->Articles->get(2);
$result = $this->Articles->delete($entity);
Ao excluir entidades algumas coisas acontecem:
Model.beforeDelete
é disparado. Se esse evento for interrompido, a
exclusão será cancelada e o resultado do evento será retornado.Model.afterDelete
será disparado.Por padrão, todas as exclusões acontecem dentro de uma transação. Você pode desativar a transação com a opção atomic:
$result = $this->Articles->delete($entity, ['atomic' => false]);
Ao excluir entidades, os dados associados também podem ser excluídos. Se suas
associações HasOne e HasMany estão configurados como dependent
, as operações
de exclusão serão ‘cascate’ para essas entidades também. Por padrão entidades
em tabelas associadas são removidas usando Cake\ORM\Table::deleteAll()
.
Você pode optar que o ORM carregue as entidades relacionadas, para então
excluir individualmente, definindo a opção cascadeCallbacks
como true
:
// No método initialize de alguma modelo Table
$this->hasMany('Comments', [
'dependent' => true,
'cascadeCallbacks' => true,
]);
Nota
Configurando cascadeCallbacks
para true
, resulta em exclusões
consideravelmente mais lentos quando comparado com exclusão em masa. A
opção cascadeCallbacks apenas deve ser ativada quando sua aplicação
tem trabalho importante manipulado por event listeners.
Cake\ORM\Table::
deleteAll
($conditions)¶Pode ter momentos em que excluir linhas individualmente não é eficiente ou útil. Nesses casos, é mais eficiente usar uma exclusão em massa para remover várias linhas de uma vez só:
// Exclui todos oss spam
function destroySpam()
{
return $this->deleteAll(['is_spam' => true]);
}
Uma exclusão em massa será considerada bem-sucedida se uma ou mais linhas forem excluídas.
Aviso
deleteAll não dispara os eventos beforeDelete/afterDelete. Se você precisa deles, você precisa, primeiro carregar uma coleção de registros e então excluí-las.
Cake\ORM\Table::
deleteOrFail
($entity, $options = [])¶Usar esse método lançará uma
Cake\ORM\Exception\PersistenceFailedException
se:
Se você deseja rastrear a entidade que falhou ao salvar, você pode usar o método
Cake\ORMException\PersistenceFailedException::getEntity()
:
try {
$table->deleteOrFail($entity);
} catch (\Cake\ORM\Exception\PersistenceFailedException $e) {
echo $e->getEntity();
}
Como isso executa internamente uma chamada ao Cake\ORM\Table::delete()
, todos eventos de exclusão
correspondentes serão disparados.
Novo na versão 3.4.1.