Ha Propel sapere quando un oggetto è stato soft-eliminato, in modo che le entità figlio potrebbe ancora mostrare il loro genitore cancellato?

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

  •  22-09-2019
  •  | 
  •  

Domanda

sto soft-eliminazione di oggetti in un database MySQL e utilizzando il Propel. Ho acquistato soft-cancellazione per lavorare, ma a costo di perdere i miei forzate relazioni padre-figlio, in quanto le righe reali non vengono eliminati.

C'è un modo per Propel per sapere che un record è stata eliminata in quando si accede, in modo che un'eccezione null-riferimento non si butta? In questo modo, anche se un genitore è stato eliminato, il suo bambino può ancora lettura è relazione, ma quando aggiornamento un bambino, o creazione un nuovo figlio , il genitore cancellato non è accessibile.

Ad esempio,

Libro ha un AuthorID, e se l'autore appartenente alla AuthorID è soft-eliminato, quindi:

$book->getAuthor();

sarebbe tornato l'autore corretto (effetto solo sulla visualizzazione). Tuttavia, se un libro nuovo è stato aggiunto, l'autore che era soft-eliminato non è disponibile per essere selezionato.

Qualcuno sa se tale funzionalità è incorporata nel Propel?

È stato utile?

Soluzione

eliminare Soft è un'astrazione rotto. Si consiglia di utilizzare il comportamento archiviabile invece (vedere perché nel blog Propel: http://propelorm.org/blog/2011/08/29/introducing-archivable-behavior-and-why-soft-delete-is-deprecated.html )

Altri suggerimenti

Non sono sicuro perché un autore sarebbe stato permesso di essere cancellati ma le sue opere non sarebbe (o, in fondo, perché questo viene su come scenario nel progetto), ma è possibile creare criteri personalizzati ed eseguirlo. Il seguente codice dipende dalla versione di Propel in uso (ma il concetto rimane lo stesso):

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

Proprio siamo imbattuti in questa domanda. Sembra che renderebbe molto più senso di non usare morbido eliminare per la funzionalità che si sta descrivendo. Altamente consigliare che si crea un campo di segnalare se gli autori sono abilitati, vale a dire un campo booleano chiamato isEnabled.

È quindi possibile utilizzare il metodo del filtro generato per la classe AuthorQuery, in questo caso

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

Se un oggetto è ancora in corso per essere utilizzato nell'applicazione in realtà non è opportuno sopprimere. Morbido funzionalità di eliminazione è veramente solo per riferimento o tornare errori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top