2010-04-19 31 views
1

IM和我已經設置了生成到模型中的一些測試表:幫助使用學說產生從數據庫模型的多對多教義

我想許多一對多的關係模型(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')); 
    } 
} 

你可以看到,沒有「refClass」中的「用戶」和「組」模型指向'UserGroup'。在這種情況下,'UserGroup'表只是Doctrine觀點中的另一張表格而不是典型的參考表格。

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

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

現在你不能引起用戶是沒有直接聯繫的集團,而是用戶組。

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

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

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

出了什麼問題?

謝謝!

+0

完全相同的問題在這裏。我開始賞金。 – 2010-12-09 15:01:17

回答

1
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定義到用戶模型。

+0

我知道。但所有內容都是通過generate_models_from_db()從mysql數據庫生成的。問題在於教義無法理解它是3個表之間的多對多(其中一個是連接表)。 – 2010-04-21 11:51:23

+0

由於@never_had_a_name表示,模型是由'generate-models-db'自動生成的。問題是爲什麼腳本無法識別多對多關係船。 – 2010-12-09 14:58:44