A Propel sabe quando um objeto foi delicado, para que as entidades infantis ainda possam mostrar seus pais excluídos?

StackOverflow https://stackoverflow.com/questions/2519297

  •  22-09-2019
  •  | 
  •  

Pergunta

Sou objetos de delicadeza suave em um banco de dados MySQL e usando o impulso ORM. Fiquei com uma delicadeza suave para o trabalho, mas com o custo de perder meus relacionamentos pai-filho forçado, já que as linhas reais não estão sendo excluídas.

Existe alguma maneira de a PROPLE saber que um registro foi delicado quando você o acessa, para que uma exceção de referência nula não seja lançada? Dessa forma, embora um pai tenha sido excluído, seu filho ainda pode ler é uma relação, mas quando atualização uma criança, ou criando Um novo filho, o pai excluído não está acessível.

Por exemplo,

O livro tem um autorid e, se o autor pertencente à Autorid é delicado, então:

$book->getAuthor();

devolveria o autor correto (apenas para fins de visualização). No entanto, se um novo livro foi adicionado, o autor que foi delicado não estará disponível para ser selecionado.

Alguém sabe se essa funcionalidade é incorporada em propel?

Foi útil?

Solução

Delete suave é uma abstração quebrada. Você deve usar o comportamento arquivável (veja por que no blog Propel: http://propelorm.org/blog/2011/08/29/introducting-archivable-behavior-and-why-soft-delete-is-deprecated.html)

Outras dicas

Não sei por que um autor poderia ser excluído, mas seus trabalhos não (ou, basicamente, por que isso surge como um cenário em seu projeto), mas você pode criar critérios personalizados e executá -lo. O código a seguir depende da versão do Propel que você está usando (mas o conceito permanece o mesmo):

$c = new Criteria();
$c->getNewCriterion(self::AUTHOR_ID, $parentId);
return self::doSelect($c, $connection);

Apenas tropeçou nessa questão. Parece que faria muito mais sentido não usar o SOFT Excluir para a funcionalidade que você está descrevendo. Eu recomendaria que você crie um campo para sinalizar se os autores estão ativados, ou seja, um campo booleano chamado IseNabled.

Você pode usar o método de filtro gerado para a classe de autoria, neste caso

AuthorQuery::create->filterByisEnabled()
                   ->find();

Se um objeto ainda será usado no aplicativo, não é realmente apropriado excluir. A funcionalidade de exclusão suave é realmente realmente para referência ou reverter erros.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top