2010-06-16 4 views
0

I ont des modèles suivants:multiples références dans Fixtures Doctrine

class User extends Doctrine_Record { 
    public function setTableDefinition() { 
     $this->hasColumn ('username', 'string', 20); 
     $this->hasColumn ('password', 'string', 40); 
     $this->hasColumn ('salt', 'string', 40); 
     $this->hasColumn ('email', 'string', 80); 
    } 

    public function setUp() { 
     $this->setTableName ('users'); 

     $this->hasMany ('Message as SentMessages', array(
      'local' => 'id', 
      'foreign' => 'sender_id' 
     )); 
     $this->hasMany ('Message as ReceivedMessages', array(
      'local' => 'id', 
      'foreign' => 'recipient_id' 
     )); 
    } 
} 


class Message extends Doctrine_Record { 
    public function setTableDefinition() { 
     $this->hasColumn ('sender_id', 'integer', 4, 
       array( 'notnull'=> true, 
         'unsigned'=>true 
     )); 
     $this->hasColumn ('recipient_id', 'integer', 4, 
       array( 'notnull'=> true, 
         'unsigned'=>true 
     )); 
     $this->hasColumn ('title', 'string', 20); 
     $this->hasColumn ('content', 'string',1000); 
    } 

    public function setUp() { 
     $this->setTableName ('messages'); 

     $this->hasOne ('User', array(
      'local' => 'sender_id', 
      'foreign' => 'id' 
      )); 
     $this->hasOne ('User as Recipient', array(
      'local' => 'recipient_id', 
      'foreign' => 'id' 
      )); 
    } 
} 

Et je besoin Fixtures à l'environnement de mon auto-test de charge

User: 
    FooUser: 
    username: FooUser 
    password: foobar 
    email: [email protected] 
    TestUser: 
    username: Testuser 
    password: foobar 
    email: [email protected] 
Message: 
    Message1: 
    User: FooUser 
    User: TestUser 
    title: Testmessage 1 
    content: This is message 1 
    Message2: 
    User: TestUser 
    User: FooUser 
    title: Testmessage 2 
    content: This is message 2 

Cela ne fonctionne pas, parce que je ne peux pas avoir 2 relations à la même table dans les appareils. Y a-t-il un correctif pour cela?

Répondre

1

Utilisez le nom crénelage dans vos appareils plutôt que le nom du modèle:

Message: 
    Message1: 
    User: FooUser 
    Recipient: TestUser 
    title: Testmessage 1 
    content: This is message 1 
    Message2: 
    User: TestUser 
    Recipient: FooUser 
    title: Testmessage 2 
    content: This is message 2 
+0

merci, fonctionne très bien! – SkaveRat