datamapper:按关系字段获取对象顺序

时间:2013-04-12 10:39:46

标签: codeigniter codeigniter-datamapper

我将Codeigniter与datamapper orm一起使用并遇到问题

这是我的模特:

  

邮寄 - >有很多行

     

行 - >有很多细胞

     

细胞 - >有很多版本

     

版本有一个已创建的字段和一个已更新的字段。

我想通过创建或更新的最新版本更改获得最后10个邮件订单..

我想这样做:

$versions = new Version();

现在通过创建或更新

获得最近10个版本的订单

并通过mailing_id区分,现在让所有邮件显示... 像这样: ?

foreach ($version as $v) 
{
$v->mailing->get();
}

thx for help

1 个答案:

答案 0 :(得分:1)

是的,您可以在循环内的每个相关模型上调用->get()但这会生成n+1 query scenario,如果您循环遍历许多版本行,则会很慢。

当您一步查询Mailing(窗帘后面的联接)时,您可以使用include_related来获取已加载数据的完整Version个实例,如下所示:

$versions = new Version;
$versions->order_by(...)->limit(...); // add your ordering and limiting as before
$versions->include_related('mailing', null, true, true);
// include related mailings, with of their fields and create instances, see
$versions->get();

foreach ($versions as $version) {
    // now the $version->mailing is a Mailing instance loaded with the related data
    print $version->mailing->id
}