0

我正在使用DataMapper ORM,我有以下表格:

channel_providers
==================
id(pk)
name

channels
=========
id(pk)
channel_provider_id(fk)
name

sales_records
==============
id(pk)
channel_id(fk)
customer_name
salesman_name
amount

我想做的是,显示sales_records表中的所有行,包括渠道提供商名称和渠道名称,但按channel_providers表中的名称列分组。

目前,我有以下代码:

$sales_records=new Sales_record();
$sales_records->get();

foreach($sales_records as $sales_record){
 $sales_record->channel->get();
 $sales_record->channel->channel_provider->get();
 //now I can write codes to to echo all data, but the problem is that $sales_records is not grouped by the channel_providers.name column

}

来自本页中的group_by示例:http: //datamapper.wanwizard.eu/pages/get.html

我知道我可以group_by在对象关联的表中存在的列上使用函数。但是在我的情况下,我想使用group_by的列不在它自己的表中,怎么办?

非常感谢大家。

4

1 回答 1

1

使用 group_by 子句应该可以工作,因为它会自动为您创建必要的连接子句,从而使您可以使用它。你真的试过了吗?

如果这不起作用,您可以回退到 CodeIgniter 的基本 Active Record 样式,例如,在 get 调用之前和创建对象之后,因为 Datamapper 只是位于 CI 的数据库内容之上:

$this->db->join('channels','channels.id = sales_records.channel_id');
$this->db->join('channel_providers','channel_providers.id = channels.channel_provider_id');

然后,您应该能够使用 group_by 对结果进行分组并从之前获取代码:

$sales_record->channel->channel_provider->group_by('channel_providers.name')->get();
于 2011-05-09T19:38:49.933 回答