Est-ce que Propel sait quand un objet a été supprimé souple, de sorte que les entités enfant pourrait encore montrer leur parent supprimé?

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

  •  22-09-2019
  •  | 
  •  

Question

Je suis des objets dans une douce Suppression base de données MySQL et en utilisant le Propel ORM. J'ai obtenu-doux pour travailler la suppression, mais au prix de perdre mes relations forcées entre parents et enfants, puisque les lignes réelles ne sont pas supprimés.

Est-il possible pour Propel de savoir qu'un enregistrement a été doux supprimé lors de l'accès, de sorte qu'une exception référence nulle n'est pas jeté? De cette façon, même si un parent a été supprimé, son enfant peut encore lire il est relation, mais quand mise à jour un enfant, ou créer un nouvel enfant , le parent supprimé n'est pas accessible.

Par exemple,

livre a un AuthorID, et si l'auteur appartenant à AuthorID est douce supprimé, alors:

$book->getAuthor();

renverrait l'auteur correct (visualisation seulement). Cependant, si un nouveau livre a été ajouté, l'auteur qui n'est pas a été supprimé douce disponible pour être sélectionné.

Quelqu'un sait-il si cette fonctionnalité est intégrée Propel?

Était-ce utile?

La solution

supprimer Soft est une abstraction cassée. Vous devez utiliser le comportement archivable à la place (voir pourquoi dans le blog Propel: http://propelorm.org/blog/2011/08/29/introducing-archivable-behavior-and-why-soft-delete-is-deprecated.html )

Autres conseils

Je ne sais pas pourquoi un auteur serait autorisé à supprimer, mais ses travaux ne serait pas (ou, au fond, pourquoi cela vient comme un scénario dans votre projet) mais vous pouvez créer des critères personnalisés et l'exécuter. Le code suivant dépend de la version de Propel que vous utilisez (mais le concept reste le même):

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

Juste sommes tombés sur cette question. On dirait que ce serait beaucoup plus logique de ne pas utiliser de supprimer doux pour la fonctionnalité que vous décrivez. Je conseille vivement que vous créez un champ pour signaler si les auteurs sont activés, à savoir un champ booléen appelé isEnabled.

Vous pouvez ensuite utiliser la méthode du filtre généré pour la classe AuthorQuery, dans ce cas

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

Si un objet va encore être utilisé dans l'application, il est pas vraiment approprié de supprimer. fonctionnalité de suppression Soft est seulement vraiment pour référence ou revenir des erreurs.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top