Как мы можем группировать по столбцу, который не находится в его собственной таблице в CodeIgniter DataMapper ORM? - PullRequest
0 голосов
/ 03 мая 2011

Я использую 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 , не находится в отдельной таблице, как это можно сделать?

Большое спасибо всем вам.

1 Ответ

1 голос
/ 09 мая 2011

Использование предложения group_by должно работать, так как оно должно автоматически создавать для вас необходимые предложения объединения, тем самым открывая вам возможность его использовать.Вы на самом деле пробовали это?

Если это не сработает, вы можете вернуться к базовому стилю активной записи CodeIgniter, например, до ваших вызовов 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();
...