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 に答える