2009-11-03 5 views
9

Cuold alguien me explique la diferencia entre la Doctrina de auto genera archivos <ModelName>.class.php y <ModelName>Table.class.php? Por ejemplo, en el tutorial Jobeet hay JobeetJob.class.php y JobeetJobTable.class.php.diferencia entre Symfony <ModelName> .class.php y <ModelName> Table.class.php

No entiendo la función de cada archivo y dónde tengo que poner los métodos para la clase de modelo.

+0

Esto muy similar a: http: //stackoverflow.com/questions/11714387/choosing-between-symfonys-doctrine-orm-files-model-class-php-and-modeltable-cla/11729994#11729994 – Omn

Respuesta

3

El archivo XXX.class contiene el descendiente Doctrine_Record, que está previsto para operar en un único registro. Guarde, cree, edite, etc. XXXTable.class.php contiene el descendiente Doctrine_Table, que está destinado a operar en una tabla completa. Buscando registros, por ejemplo.

+0

Fractalizer, en consecuencia, podemos deducir que las funciones de creación, edición y eliminación pertenecerán a XXX.class y a todas las consultas, como - seleccionar de donde> .... formará parte de XXXTable.class.php? –

+0

Para consultas, puede usar mejor DQL. Es más poderoso. –

2

Su archivo Modelname.class.php contiene la clase contenedora, por ejemplo, Publicar. Esta clase tiene todos los métodos y propiedades de una fila en su tabla, por ejemplo, la tabla Publicar. Si tiene columnas en la tabla como id, text, etc., podrá acceder a ellas a través de la clase Post.

Sin embargo, su PostTable (o clase XxxxxTable) es el tabla de referencia, lo que significa que esta clase debe ser responsable de la consulta de la tabla para recuperar los datos.

Permítanme dar un breve ejemplo. Digamos que desea sacar una sola publicación de la tabla y luego editarla.

Primero, haría como $post = Doctrine::getTable('Post')->findOneById(1); Esto se hace desde la clase de tabla porque querrá extraer algunos datos de una tabla específica.

Ahora tiene su publicación (como en un objeto Post), porque ->findOneById(...) ha consultado la base de datos por usted. Luego puede editar eso, por ejemplo con $post->title = "a nice title". Finalmente, guarde su publicación con $post->save();.

Excepciones a esto es cuando desea recuperar objetos relacionados, que por ejemplo podrían ser respuestas a su publicación. Esto se haría a través del objeto que ya retiró al $post.

Espero haber aclarado mi punto, si no, no dude en hacer más preguntas.

+2

Añadiría para explicar mejor la clase Table, que puede ampliar la funcionalidad de esta clase escribiendo sus propios métodos, por ejemplo, si siempre consulta una tabla de Eventos buscando los próximos eventos, puede tener Doctrine :: getTable ("Eventos") -> getUpcomingEvents() como ejemplo. – richsage

+0

Sí, pero también puedes hacerlo con la otra clase. Digamos que tienes un modelo con "firstname" y "lastname" - entonces podrías hacer el método -> getFullName(). Punto importante sin embargo. – phidah

Cuestiones relacionadas