2012-09-05 12 views
5

que tienen las siguientes tablas:¿Cuál es la forma más correcta de evitar este error de propulsión "No se puede redeclarar la función"?

user, logbook, user_logbook

libro de registro de usuario es una tabla de unión (isCrossRef="true" en el schema.xml), que contienen user_id y logbook_id claves externas.

También quería recordar el libro de registro actualmente seleccionado para cualquier usuario dado, así que puse un current_logbook_id también en mi tabla user, y le di una clave externa. Sin embargo, en mi archivo BaseUserQuery.php obtengo dos funciones filterByLogbook().

sé que cuando se tienen dos claves ajenas a la misma mesa, de la misma tabla, se obtiene funciones como getUserRelatedBySomething() y getUserRelatedBySomethingElse(), pero lo que es lo mejor que puede hacer en esta situación?

Por supuesto, puedo eliminar la clave externa y usar la ID guardada, o supongo que podría crear una nueva tabla de unión (aunque eso no parece correcto). ¿Qué es lo mejor que se puede hacer en esta situación, en términos de "haciendo lo correcto" en MySQL y Propel (espero que pueda hacer ambas cosas).

+1

A menos que haya una manera que yo no conozca, sospecho que lo correcto es inclinar Propel y agregar una manera limpia de manejar esta situación. ¡Piensa en el buen karma! –

+0

Entonces, ¿estás bastante seguro de que no hay forma posible? – LeonardChallis

+1

En realidad, creo que hay - ver mi respuesta –

Respuesta

2

En su schema.xml añadir phpName and refPhpName attributes a la clave externa de la definición de la tabla de usuario:

<table name="user" phpName="User"> 
    ... 
    <foreign-key foreignTable="logbook" phpName="CurrentLogBook" refPhpName="CurrentLogBookUser"> 
     <reference local="current_logbook_id" foreign="id"/> 
    </foreign-key> 
    ... 
    </table> 

entonces usted debe conseguir filterByCurrentLogBook() y filterByCurrentLogBookUser() funciones y no hay colisiones.

+0

Tan simple como eso. Brillante, gracias: D – LeonardChallis

+0

Pregunta rápida, ¿se supone que hace que '$ user-> getCurrentLogbook()' esté disponible también? No veo eso:/ – LeonardChallis

+0

Sí, lo tengo en la configuración de prueba. –

Cuestiones relacionadas