簡體   English   中英

在Codeigniter中使用Datamapper ORM在同一對象上進行多對多和多對多

[英]Many to one and Many to many on same objects using datamapper ORM in Codeigniter

我的應用程序需要:

用戶擁有許多項目。 項目只有一位所有者。

用戶從事許多項目。 項目有很多用戶。

所以我有3個表,用戶,projects_users,項目。 關系是:

一個用戶(所有者)---許多項目(created_by)

許多用戶(id)----通過projects_users(user_id,project_id)----許多項目(id)。

在Codeigniter中,我在datamapper模型中設置了以下關系:

Class Project extends DataMapper {

var $has_one = array(
    'created_by' => array(
        'class' => 'user',
        'other_field' => 'owns'
    )
);
var $has_many = array('user' => array(
        'class' => 'user',
        'other_field' => 'project',
        'join_table' => 'projects_users'));

和...

    class User extends DataMapper {

var $has_many = array(
    'project' => array(
        'class' => 'project',
        'other_field' => 'user',
        'join_table' => 'projects_users'
    ),
    'owns' => array(
        'class' => 'project',
        'other_field' => 'created_by'
    )
);

但是,這似乎不起作用,並且出現了遞歸錯誤。 在datamapper中表示這種關系的正確方法是什么?

在文檔頁面上查看與同一模型的多重關系http : //datamapper.wanwizard.eu/pages/advancedrelations.html

我猜是這樣的:

class Project extends DataMapper {
    $has_one = array(
        'owner' => array(
            'class' => 'user',
            'other_field' => 'owned_project'
        )
    );
    $has_many = array(
        'user' => array(
            'class' => 'user',
            'other_field' => 'user_project'
        )
    );
}

class User extends DataMapper {
    $has_many = array(
        'owned_project' => array(
            'class' => 'project',
            'other_field' => 'owner'
        ),
        'user_project' => array(
            'class' => 'project',
            'other_field' => 'user'
        )
    );
}

您將像這樣訪問:

$project = new Project(1); // where "1" is the ID of the project
$owner = $project->owner->get();
$project_users = $project->user->get();

// -------------------------------

$me = new User(1); // where "1" is the ID of the user
$my_projects = $me->owned_project->get();

UPDATE

您將需要將您的projects_users連接表更新為:

projects_users
--------------
user_id
owner_id
owned_project_id
user_project_id

請注意,這些都與您在$has_one$has_many數組中聲明的“鍵”匹配。 您將不需要更新users表或projects表(唯一的要求是每個users表或projects表都有一個名為“ id”的主鍵字段)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM