Как создавать связанные записи с Doctrine PHP - PullRequest
2 голосов
/ 12 октября 2010

Я смоделировал два класса с отношением многие ко многим: Пользователь и Разговор, и я не могу создать связь между этими двумя классами, когда я их использую:

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" остается пустой ... Я делаю это правильно?

Спасибо за ваш ответ,

Martin

1 Ответ

1 голос
/ 18 октября 2010

Вот классы, необходимые для многих ко многим.Я адаптировал их из своего собственного кода, чтобы имена полей немного отличались, но это должно дать вам представление о том, что вам нужно:

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();
    }
}
...