¿El Propel saber cuando un objeto ha sido eliminado temporalmente, de modo que las entidades secundarias todavía podían mostrar sus padres eliminado?

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

  •  22-09-2019
  •  | 
  •  

Pregunta

Estoy objetos blandos, el restablecimiento de una base de datos MySQL y utilizar el ORM Propel. He conseguido borrar blanda para el trabajo, pero a costa de perder mis relaciones padre-hijo forzadas, ya que no se eliminan las filas reales.

¿Hay alguna forma de Propel para saber que un registro ha sido borrado suave cuando se accede a él, de modo que una excepción nula referencia no se lanza? De esta manera, si bien se ha suprimido un padre, su hijo puede todavía leer que de relación, pero cuando actualización un niño, o crear un nuevo hijo , el padre borrado no es accesible.

Por ejemplo,

libro tiene una AuthorId, y si el autor pertenece a AuthorId es suave eliminado, entonces:

$book->getAuthor();

devolvería el autor correcto (únicamente para visualizar). Sin embargo, si se añade un nuevo libro, el autor que fue borrado suave, no está disponible para ser seleccionado.

¿Alguien sabe si esa funcionalidad está integrada en Propel?

¿Fue útil?

Solución

suave de eliminación es una abstracción roto. Debe utilizar el comportamiento archivado en su lugar (ver por qué en el Propel blog: http://propelorm.org/blog/2011/08/29/introducing-archivable-behavior-and-why-soft-delete-is-deprecated.html )

Otros consejos

No estoy seguro de por qué se le permitiría a borrar un autor, pero sus obras no lo haría (o, básicamente, por qué esto aparece como un escenario en el proyecto), pero se puede crear criterios personalizados y ejecutarlo. El siguiente código depende de la versión de propulsión que está utilizando (pero el concepto sigue siendo el mismo):

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

Sólo se topó con esta pregunta. Parece que tendría mucho más sentido que no utiliza suave eliminar la funcionalidad que usted está describiendo. Mucho le aconsejaría que se crea un campo de bandera si los autores están habilitados, es decir, un campo booleano llamado isEnabled.

A continuación, puede utilizar el método de filtro generado para la clase AuthorQuery, en este caso

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

Si un objeto es todavía va a ser utilizado en la aplicación no es realmente apropiado eliminar. funcionalidad de eliminación suave es realmente sólo por los errores de referencia o volver.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top