Me dieron este proyecto para trabajar sin absolutamente ninguna documentación o contacto con el desarrollador. Noté en el volcado de la base de datos que están almacenando lo que parecen espacios de nombres PHP para modelos Eloquent en un par de tablas. Por ejemplo, una tabla de direcciones tiene una columna de cadena denominada "object_type" con el valor siempre "App \ Entities \ Client". Busqué en todo el proyecto el código PHP que usaría este valor. Con suerte, me dará una idea de su propósito. Para mi sorpresa, el proyecto nunca utiliza este valor. Solo lo veo codificar estos valores al insertarlos en la base de datos.

Mi pregunta es , ¿se trata de algún tipo de práctica de diseño de modelado de base de datos y / o ORM? Si es así, ¿podría explicar cómo podría usarse esto en un sentido práctico simple?

Quizás este era un concepto que tenía el desarrollador y nunca evolucionó. Es una idea interesante, pero la idea de unirse a través de MySQL en una cadena condicional suena a tortura.

1
csteel 17 oct. 2018 a las 02:28

2 respuestas

La mejor respuesta

Suena como relaciones polimórficas de Laravel:

Tipos polimórficos personalizados.
De forma predeterminada, Laravel usará el nombre de clase completamente calificado para almacenar el tipo del modelo relacionado.

Y, sí, esta es una técnica de modelado válida, aunque los puristas con razón argumentar esta técnica abusa de la forma normal.

4
bishop 17 oct. 2018 a las 00:39

No estoy seguro de lo que pensaban los desarrolladores.

Pero imaginando que estamos en un foro con hilo y respuestas a cada hilo. Quizás queramos tener una tabla de Favoritos donde podamos guardar respuestas e hilos.

Una forma de hacerlo sería tener una columna en la tabla favoritos llamada "object_type" (solo para usar el mismo término que tiene en su caso) y luego cuando guardemos un objeto en la base de datos con elocuente podemos utilizar:

$favourite->object_type = get_class($thread); //or get_class($reply) in case we want a reply
$favourite->save(); 

De esta forma se guardará el espacio de nombres de esa clase en la base de datos. Pero laravel lo reconocerá cuando lo obtengamos de la base de datos.

Espero que este resfriado sea de ayuda.

0
Abel 16 oct. 2018 a las 23:44