一千萬個為什麽

搜索

幫助從數據庫中生成多個到多個學說的模型

即時通訊使用doctrine,我已經設置了一些測試表來生成模型:

我想要一個多對多的關系模型(3個表轉換成3個模型)

(事情被簡化以明確指出)

mysql表:

user:
id INT//primary key
name VARCHAR

group:
id INT//primary key
name VARCHAR

user_group:
user_id INT//primary and foreign key to user.id
group_id INT//primary and foreign key to group.id

我認為它會生成這些模型(來自文檔):

// User.php

class User extends Doctrine_Record
{
    public function setTableDefinition()
    {
        $this->hasColumn('id');

        $this->hasColumn('name');
    }

    public function setUp()
    {
        $this->hasMany('Group' as 'Groups', array(
                'refClass' => 'UserGroup',
                'local' => 'user_id',
                'foreign' => 'group_id'
            )
        );
    }
}

// Group.php

class Group extends Doctrine_Record
{
    public function setTableDefinition()
    {
        $this->hasColumn('id');

        $this->hasColumn('name');
    }

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

// UserGroup.php

class UserGroup extends Doctrine_Record
{
    public function setTableDefinition()
    {
        $this->hasColumn('user_id')
        );

        $this->hasColumn('group_id')
        );
    }
}

但它產生了這個:

// User.php

abstract class BaseUser extends Doctrine_Record
{
    public function setTableDefinition()
    {
        $this->hasColumn('id');

        $this->hasColumn('name');
    }

    public function setUp()
    {
        $this->hasMany('UserGroup', array(
             'local' => 'id',
             'foreign' => 'user_id'));
    }
}

// Group.php

abstract class BaseGroup extends Doctrine_Record
{
    public function setTableDefinition()
    {
        $this->hasColumn('id');

        $this->hasColumn('name');
    }

    public function setUp()
    {
        $this->hasMany('UserGroup', array(
             'local' => 'id',
             'foreign' => 'group_id'));
    }
}

// UserGroup.php

abstract class BaseUserGroup extends Doctrine_Record
{
    public function setTableDefinition()
    {
        $this->hasColumn('user_id');

        $this->hasColumn('group_id');
    }

    public function setUp()
    {
        $this->hasOne('User', array(
             'local' => 'user_id',
             'foreign' => 'id'));

        $this->hasOne('Group', array(
             'local' => 'group_id',
             'foreign' => 'id'));
    }
}

正如您所看到的,'User'和'Group'模型中沒有'refClass'指向'UserGroup'。在這種情況下,'UserGroup'表只是Doctrine的另一個表,而不是典型的參考表。

通常,如果它像第一個一樣正確,你可以這樣做:

$user = new User();
$user->group[1]->name = 'group 1';
$user->group[2]->name = 'group 2';

現在你無法導致用戶沒有直接鏈接到Group,而是鏈接到UserGroup。

我在mysql中檢查了我的表定義。他們是對的。 user_group有2列(主鍵和外鍵),每列都指向用戶或組中的主鍵。

但我想在Doctrine模型中使用標準的多對多關系模型。

我很感激一些幫助。我現在已經努力想出了半天。

哪裏不對?

謝謝!

最佳答案

Doctrine requires that Many-to-Many relationships be bi-directional. For example: both User must have many Groups and Group  must have many User.

因此,您必須將hasMany定義添加到User模型。

轉載註明原文: 幫助從數據庫中生成多個到多個學說的模型