Pregunta

¿Existe una forma sencilla de escribir una función común para cada una de las operaciones CRUD (crear, recuperar, actualizar, eliminar) en PHP SIN usar ningún marco de trabajo? Por ejemplo, deseo tener una única función de creación que tome el nombre de la tabla y los nombres de los campos como parámetros e inserte datos en una base de datos mySQL . Otro requisito es que la función debe poder admitir uniones, es decir, debe ser capaz de insertar datos en varias tablas si es necesario.

Sé que estas tareas se pueden realizar utilizando un marco, pero debido a varias razones, demasiado largas para explicar aquí, no puedo usarlas.

¿Fue útil?

Solución

Escribí esto mismo, es una especie de andamio pulido. Es básicamente una clase cuyo constructor toma la tabla que se va a usar, una matriz que contiene nombres y tipos de campos y una acción. Basado en esta acción, el objeto llama a un método en sí mismo. Por ejemplo:

Esta es la matriz que paso:

$data = array(array('name' => 'id', 'type' => 'hidden')
          , array('name' => 'student', 'type' => 'text', 'title' => 'Student'));

Entonces llamo al constructor:

new MyScaffold($table, 'edit', $data, 

Escribí esto mismo, es una especie de andamio pulido. Es básicamente una clase cuyo constructor toma la tabla que se va a usar, una matriz que contiene nombres y tipos de campos y una acción. Basado en esta acción, el objeto llama a un método en sí mismo. Por ejemplo:

Esta es la matriz que paso:

$data = array(array('name' => 'id', 'type' => 'hidden')
          , array('name' => 'student', 'type' => 'text', 'title' => 'Student'));

Entonces llamo al constructor:

<*>

En el caso anterior, el constructor llama al método 'editar' que presenta un formulario que muestra los datos de la tabla $, pero solo los campos que configuro en mi matriz. El registro que utiliza está determinado por el método $ _GET. En este ejemplo, el campo "estudiante" se presenta como un cuadro de texto (de ahí el tipo de "texto"). El 'título' es simplemente la etiqueta utilizada. Al estar "oculto", el campo de ID no se muestra para su edición, pero está disponible para el programa para su uso.

Si hubiera pasado 'eliminar' en lugar de 'editar', se eliminaría el registro de la variable GET. Si solo pasara un nombre de tabla, se establecería de forma predeterminada una lista de registros con botones para editar, eliminar y nuevo.

Es solo una clase que contiene todos los CRUD con mucha personalización. Puedes hacerlo tan complicado o tan simple como desees. Al convertirlo en una clase genérica, puedo colocarlo en cualquier proyecto y simplemente pasar instrucciones, información de tablas e información de configuración. Es posible que, en una tabla, no quiera permitir que se agreguen nuevos registros a través del andamio, en este caso, podría establecer " newbutton " para ser falso en mi matriz de parámetros.

No es un marco en el sentido convencional. Solo una clase independiente que maneja todo internamente. Hay algunos inconvenientes a esto. Las claves deben ser que todas mis tablas deben tener una clave principal llamada 'id', usted podría escapar sin esto, pero complicaría las cosas. Otro es que debe prepararse una gran variedad de información detallada sobre cada tabla que se debe administrar, pero solo necesita hacer esto una vez.

Para ver un tutorial sobre esta idea, vea here

GET['id']);

En el caso anterior, el constructor llama al método 'editar' que presenta un formulario que muestra los datos de la tabla $, pero solo los campos que configuro en mi matriz. El registro que utiliza está determinado por el método $ _GET. En este ejemplo, el campo "estudiante" se presenta como un cuadro de texto (de ahí el tipo de "texto"). El 'título' es simplemente la etiqueta utilizada. Al estar "oculto", el campo de ID no se muestra para su edición, pero está disponible para el programa para su uso.

Si hubiera pasado 'eliminar' en lugar de 'editar', se eliminaría el registro de la variable GET. Si solo pasara un nombre de tabla, se establecería de forma predeterminada una lista de registros con botones para editar, eliminar y nuevo.

Es solo una clase que contiene todos los CRUD con mucha personalización. Puedes hacerlo tan complicado o tan simple como desees. Al convertirlo en una clase genérica, puedo colocarlo en cualquier proyecto y simplemente pasar instrucciones, información de tablas e información de configuración. Es posible que, en una tabla, no quiera permitir que se agreguen nuevos registros a través del andamio, en este caso, podría establecer " newbutton " para ser falso en mi matriz de parámetros.

No es un marco en el sentido convencional. Solo una clase independiente que maneja todo internamente. Hay algunos inconvenientes a esto. Las claves deben ser que todas mis tablas deben tener una clave principal llamada 'id', usted podría escapar sin esto, pero complicaría las cosas. Otro es que debe prepararse una gran variedad de información detallada sobre cada tabla que se debe administrar, pero solo necesita hacer esto una vez.

Para ver un tutorial sobre esta idea, vea here

Otros consejos

Si intenta escribir dicha función, pronto descubrirá que se acaba de dar cuenta de otro marco.

Por supuesto que no, es por eso que esos marcos existen e implementan facilidades crudimentarias. Primero intentaría convencer a quien sea necesario para que realmente use un marco existente y, en segundo lugar, al fallar lo anterior, echaría un vistazo a uno o dos de ellos y copiaría las ideas de implementación. Si falla todo esto, puede consultar http://www.phpobjectgenerator.com/

¿Sin ningún marco incluido sin ningún ORM? De lo contrario, sugeriría consultar Doctrine o Propel .

Sé cómo te sientes.

Pork.DbObject es una clase simple desde la que puedes extender tus objetos. Solo necesita una clase de conexión db para funcionar.

por favor revisa: www.schizofreend.nl/pork.dbobject/

(oh yeah, yuk @ php object generator. bloat alert! ¿Quién quiere tener esas funciones personalizadas en cada clase?)

Creo que deberías escribir tus propias funciones para lograr CRUD a menos que estés estresado por el tiempo. puede ser un marco en sí mismo, pero necesita aprender lo que hace el marco antes de gritar el marco ... también es útil saber estas cosas porque puede fácilmente detectar errores en el marco y corregirlos usted mismo ... ....

Encontré esta pregunta en SO hace un tiempo y terminé no encontrando nada en ese momento que hiciera esto de manera liviana.

Terminé de escribir el mío y recientemente pude abrirlo para obtenerlo (licencia MIT) en caso de que otros lo encuentren útil. ¡Está en Github, siéntase libre de comprobarlo y usarlo si se ajusta a sus necesidades!

https://github.com/ArthurD/php-crud-model-class

Esperamos que le sirva para algo. ¡Me encantaría ver algunas mejoras / contribuciones, así que siéntase libre de enviar solicitudes de extracción! :-)

es posible pero no lo recomendaría.

Si no hay absolutamente ninguna forma de usar un marco, podría crear una clase base que se extienda a todos los demás objetos del modelo. A continuación, puede hacer que la clase base genere & amp; ejecute SQL basado en get_class () y get_class_vars () .

¿Es posible? Si.
¿Lo recomendaría? no

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