2011-02-03 9 views
5

Tengo el siguiente esquemaPHP Doctrine: ¿cómo configurar columnas refClass extra?

User: 
    columns: 
     id: 
      type: integer 
      primary: true 
     name: string 
    relations: 
    UserGroup: 
     local: userGroup_id 
     foreign: id 
     refClass: User2Group 

UserGroup: 
    columns: 
     id: 
      type: integer 
      primary: true 
     name: string 
    relations: 
    User: 
     local: user_id 
     foreign: id 
     refClass: User2Group 

User2Group: 
    columns: 
     user_id: 
      type: integer 
      primary: true 
     userGroup_id: 
      type: integer 
      primary: true 
     extraColumn: string 

y yo estoy tratando de hacer

$user=new Model_User(); 
     $user->name='user'; 

     $user->UserGroup[0]->name='group'; 
     $user->UserGroup[0]->extraColumn='test'; 

     $user->save(); 

pero me da una excepción "Doctrine_Record_UnknownPropertyException" con el mensaje "/ componente relacionado Desconocido propiedad registro 'extraColumn' sobre" UserGroup "", ¿qué estoy haciendo mal? (Por cierto, intenté cambiar el local/foráneo a cualquier otra cosa, todavía no funcionará)

Respuesta

3

Doctrine realmente no admite columnas adicionales en la tabla de unión. Pero puede acceder y actualizar los valores usando Doctrine_Query.

Doctrine_Query::create() 
    ->update('User2Group') 
    ->set('extraColumn', 'Dude its working') 
    ->where('user_id = ?', $user['id']) 
    ->andWhere('userGroup_id = ?', $userGroup['id']) 
    ->execute(); 

Para obtener este valor, debe hacer una consulta de selección.

Doctrine::getTable('User')->createQuery('u') 
    ->addSelect('u.*, ug.*, u2g.extraColumn') 
    ->leftJoin('u.UserGroup ug') 
    ->leftJoin('ug.User2Group u2g WITH u2g.user_id = ?', $user['id']) 
    ->execute(); 
+0

aparentemente no hay otra manera, al menos con Doctrine 1. ¡Gracias! – lunarnet76

+0

no hay problema, tuve que resolver esto de la peor manera – xzyfer

Cuestiones relacionadas