в ATK4, как я могу изменить модель, чтобы получить список DISTINCT - PullRequest
1 голос
/ 01 ноября 2011

У меня есть список заданных историй и, в другой таблице, набор задач, прикрепленных к этим историям.

Для данного пользователя я хочу получить отдельный список номеров историй, например, если пользовательимеет несколько задач, история будет перечислена только один раз.

Я могу сделать это с прямым SQL, но как мне реализовать это с моделью в ATK4?

На данный момент таблицапривязка участников к истории имеет модель, определенную следующим образом:

<?php
 class Model_StoryMember extends Model_Table {
public $entity_code='vscrum_story_member';
public $table_alias='sm';

function init(){
           parent::init();
           $this->addField('story_id')->system(true)->visible(false)->   
             defaultValue($this->api->recall('story_id'));
           $this->addField('team_id')->system(true)->visible(false)->
             defaultValue($this->api->recall('team_id'));
           $this->addField('sprint_id')->system(true)->visible(false)->
             defaultValue($this->api->recall('sprint_id'));
           $this->addField('member_id')->refModel('Model_Member');
           $this->addField('points')->datatype('numeric');
           $this->addField('notes')->datatype('text');
 }
 }

Эта модель может содержать запись для каждого пользователя, например

    STORY
    ID     Name     Points Responsible
    1000   Story 1      2     1
    1001   Story 2      3     1

    STORY_MEMBER
    ID     Story    Member  Points Description
    1      1000     1       .5     Task 1
    2      1000     1       .5     Task 2 
    2      1000     2       1      Task 1
    3      1001     1       1      Task 1
    4      1001     2       1      Task 2 
    5      1001     3       1      Task 3

, поэтому, если я просматриваю данные для пользователя 1 или пользователя 2, я хочу вернуть только две строки (даже если у пользователя одна задача в истории 1000) история 1000 истории 1001

, а для пользователя 3 я получу только одну строку для истории 1001.

Чтобы добавить далее, я хочу иметь возможность объединить два запроса и вернуть отдельный список, поэтому, если я запрашиваю его для члена 1, если у меня есть базовый sql, например

SELECT id, name
  from story
 where responsible=1
 union
select s.id, s.name 
  from story s, story_member sm
 where s.id=sm.story_id
   and sm.member_id=1

, я получу списокистории, за которые ответственен один член, а такжеose, для которого они вовлечены.Профсоюз позаботится об уникальности такого рода, поэтому каждая история возвращается только один раз (так как вполне вероятно, что они вовлечены в истории, которыми они владеют), но могут также быть истории, в которых они участвуют, но за них отвечает кто-то другой.

Есть ли способ объединить два запроса вместе, чтобы я получил один массив, возвращаемый на странице?

TIA

1 Ответ

1 голос
/ 02 ноября 2011

Вам, вероятно, лучше использовать запрос вручную.Попробуйте:

$dsql->option('distinct');

Вы можете изменить запрос вашего представления, например, если у вас есть сетка, тогда:

$this->grid->dq->option('distinct');

Вызовите это ПОСЛЕ того, как модель была установлена.

...