使用DataMapper ORM和Codeigniter以多对多关系选择连接表值

时间:2012-09-08 18:17:16

标签: php codeigniter orm datamapper codeigniter-datamapper

我有这个表结构:

|用户| ---有很多> --- | preferences_users | ---<有很多--- |偏好|

首选项可以是“名字”或“姓氏”,但这些首选项的值存储在连接表中。

我正在使用Codeigniter和Datamapper ORM将关系表转换为对象,但是我不知道如何在连接表中获取此值。

我这样做:

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

我的关系设置为$has_many = array('tablename');,我可以从每个表中获取值。

HOwever我希望能够从加入表中获取表列值,是否有人知道如何执行此操作?

谢谢,

伊恩

2 个答案:

答案 0 :(得分:0)

我找到了答案in the documentation

  

$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");
    }
}
     

有关详细信息,请参阅Working with Join Fields

答案 1 :(得分:0)

您可以使用:

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

然后获取连接字段:

$Object->{join}_count;

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

感谢。