我有这样的表结构:
|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"); } }
有关详细信息,请参见使用联接字段。