使用DataMapperORM和Codeigniter在多对多关系中选择联接表值


Using DataMapper ORM and Codeigniter to select join table value in a many to many relationship

我有这样的表结构:

|users|---有许多>---| preference_users|---<有许多---|偏好|

首选项可以是类似"名字"或"姓氏"的内容,但这些首选项的值存储在联接表中。

我正在使用Codeigniter和Datamapper ORM将关系表转换为对象,但我不确定如何在联接表中获得此值。

我在做这个:

$user = new User();
$user->where('unique_url', $url)->get();
$user->preferences->get_iterated();

我的关系被设置为它们都有$has_many = array('tablename');,并且我能够从每个表中获得值。

但是,如果我想从联接表中获得表列值,有人知道如何做到这一点吗?

谢谢,

Ian

您可以使用这个:

$Object->joinedObject->include_join_fields()->get();

然后获取加入字段:

$Object->{join}_count;

请注意添加文档中引用的join_ before field (count) name

谢谢。

我在文档中找到了答案:

$object->include_join_fields()

此方法没有任何选项。在添加之前设置正确关系您可以在{$query}_related_{$model}或在对相关项目调用get()之前。表中所有不属于关系的字段并且以"join_"为前缀。

此方法可能会返回意外结果或引发具有深度的错误关系。

用法:

// Create User $u = new User(); $u->get_by_id($userid);
// get all alarms for this user, and include the extra 'wasfired'
field $u->alarm->include_join_fields()->get();
foreach($u->alarm as $alarm) {
    if($alarm->join_wasfired) {
        echo("{$alarm->name} was fired'n");
    } else {
        echo("{$alarm->name} was NOT fired'n");
    }
}

有关详细信息,请参见使用联接字段。