2011-02-03 12 views
5

Mam następującego schematuDoctrine PHP: jak ustawić dodatkowe kolumny refClass?

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 

i staram się robić

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

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

     $user->save(); 

ale daje mi wyjątek „Doctrine_Record_UnknownPropertyException” z komunikatem „Nieznany nieruchomości zapis/odnośnym składnikiem«extraColumn»na” UserGroup "", co robię źle? (Przy okazji próbowałem zmienić lokalny/obcy na wszystko, co jeszcze nie zadziała)

Odpowiedz

3

Doctrine tak naprawdę nie obsługuje dodatkowych kolumn w tabeli sprzężenia. Ale możesz uzyskać dostęp i aktualizować wartości za pomocą Doctrine_Query.

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

Aby uzyskać tę wartość, należy wykonać zapytanie wyboru.

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

najwyraźniej nie ma innej drogi, przynajmniej z Doctrine 1. Dzięki! – lunarnet76

+0

nie ma problemu, musiałem wymyślić to na własnej skórze – xzyfer

Powiązane problemy