Solución error en relaciones entre id’s en symfony

Estaba realizando unas pruebas con el plug-in de symfony sfDoctrineApplyPlugin y me he encontrado con varios problemas.

Partimos de sfDoctrineGuard 5.0, una vez tenemos instalado el plugin, e intenamos instalar sfDoctrineApplyPlugin ( symfony plugin:install sfDoctrineApplyPlugin ), según la documentación la cargamos en nuestro schema.yml la siguiente configuración de tablas:

sfGuardUserProfile:
  tableName: sf_guard_user_profile
  columns:
    id:
      type: integer(4)
      primary: true
      autoincrement: true
    user_id:
      type: integer(4)
      notnull: true
    email:
      type: string(80)
    fullname:
      type: string(80)
    validate:
      type: string(17)
  # Don't forget this!
  relations:
    User:
      class: sfGuardUser
      foreign: id
      local: user_id
      type: one
      onDelete: cascade
      foreignType: one
      foreignAlias: Profile

Pero cuando intentamos hacer el insert sql tenemos el siguiente error:

SQLSTATE[HY000]: General error: 1005 Can’t create table ‘facecar.#sql-4da_5e’ (errno: 150). Failing Query: “ALTER TABLE sf_guard_user_profile ADD CONSTRAINT sf_guard_user_profile_user_id_sf_guard_user_id FOREIGN KEY (user_id) REFERENCES sf_guard_user(id) ON DELETE CASCADE”. Failing Query: ALTER TABLE sf_guard_user_profile ADD CONSTRAINT sf_guard_user_profile_user_id_sf_guard_user_id FOREIGN KEY (user_id) REFERENCES sf_guard_user(id) ON DELETE CASCADE

Como siempre, Mysql tan explicativo, y después de mirar en las dos tablas compruebo que sf_guard_user_id es Bingint(20), y en user_profiple es integer, de ahí el error al crear la clave.

Como lo solucionamos? pues la definición del esquema es incorrecta (o probablemente desfasada con los cambios de symfony). Hay que definir los campos como integer (5):

sfGuardUserProfile:
  tableName: sf_guard_user_profile
  columns:
    id:
      type: integer(5)
      primary: true
      autoincrement: true
    user_id:
      type: integer(5)
      notnull: true
    email:
      type: string(80)
    fullname:
      type: string(80)
    validate:
      type: string(17)
  # Don't forget this!
  relations:
    User:
      class: sfGuardUser
      foreign: id
      local: user_id
      type: one
      onDelete: cascade
      foreignType: one
      foreignAlias: Profile
Anuncios

5 comentarios en “Solución error en relaciones entre id’s en symfony

  1. Muchas gracias…
    Da gusto encontrar una respuesta sencilla directa y CORRECTA. 😀

  2. Muchas gracias me ahorraste un gran dolor de cabeza!

    Saludos!

  3. Muchisimas gracias! llevaba 3 días atorado en eso

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s