如何使用Doctrine PHP创建相关记录

时间:2010-10-12 07:38:09

标签: php doctrine many-to-many associations entity-relationship

我已经建模了两个具有多对多关系的类:User和Conversation,当我使用它们时,我无法在这两个类之间创建链接:

class User extends Doctrine_Record
{
 public function setTableDefinition() {

         $this->hasColumn('udid', 'string', 255);
      $this->hasColumn('nb_requetes', 'integer', 255);
 }

 public function setUp() {
  $this->actAs('Timestampable');
  $this->hasMany('Conversation as Conversations',
                        array('local'=> 'user_id',
                               foreign'=> 'conversation_id',
                              'refClass' => 'UserConversation'));
 }

}

class Conversation extends Doctrine_Record
{
 public function setTableDefinition() {

         $this->setTableName('conversations');

   $this->hasColumn('initiator_id', 'integer', 20);
   $this->hasColumn('responder_id', 'integer', 20);
 }

 public function setUp() {
  $this->actAs('Timestampable');

  $this->hasMany('User as Users',
                            array('local' => 'conversation_id',
                                  'foreign' => 'user_id',
                                  'refClass' => 'UserConversation'));
 }
}

我正试图通过做类似的事情来使用它:

$user = new User();
$user->save();

$conversation = new Conversation();
$conversation->users[] = $user;
$conversation->save();

但它没有用,我的联结表“UserConversation”仍然是空的......我是以正确的方式做到的吗?

感谢您的回答,

马丁

1 个答案:

答案 0 :(得分:1)

以下是多对多所需的课程。我已根据自己的代码对其进行了调整,因此字段名称略有不同,但它应该让您了解所需内容:

class User extends Doctrine_Record
{
    public function setTableDefinition()
    {
        $this->hasColumn('name', 'string', 255);
    }

    public function setUp()
    {
        parent::setUp();
        $this->hasMany('Conversation as Conversations', array(
            'refClass' => 'UserConversations',
            'local' => 'conversation_id',
            'foreign' => 'user_id'
        ));
    }
}

class Conversation extends Doctrine_Record
{
    public function setTableDefinition()
    {
        $this->hasColumn('name', 'string', 255);
    }

    public function setUp()
    {
        parent::setUp();
        $this->hasMany('User as Users', array(
            'refClass' => 'UserConversations',
            'local' => 'user_id',
            'foreign' => 'conversation_id'
        ));
    }
}

class UserConversations extends Doctrine_Record
{
    public function setTableDefinition()
    {
        $this->hasColumn('user_id', 'integer', 4, array(
            'type' => 'integer',
            'primary' => true,
            'length' => '4',
        ));
        $this->hasColumn('conversation_id', 'integer', 4, array(
            'type' => 'integer',
            'primary' => true,
            'length' => '4',
        ));
        $this->hasColumn('name', 'string', 255, array(
            'type' => 'string',
            'length' => '255',
        ));
    }

    public function setUp()
    {
        parent::setUp();
    }
}