1

定義済みのストーリーのリストと、別のテーブルに、それらのストーリーに関連付けられた一連のタスクがあります。

特定のユーザーについて、ストーリー番号の個別のリストを取得したいです。たとえば、ユーザーが複数のタスクを持っている場合、ストーリーは一度だけリストされます。

私は直接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 のデータを表示すると、2 行だけが返されます (ユーザー 1 にはストーリー 1000 で 2 つのタスクがあります) ストーリー 1000 ストーリー 1001

ユーザー 3 の場合、ストーリー 1001 に対して 1 行しか取得できません。

さらに追加するには、2つのクエリを結合して個別のリストを返すことができるようにしたいので、メンバー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

メンバー 1 が担当するストーリーと、メンバーが関与するストーリーのリストを取得します。ユニオンはユニークな種類の処理を行うため、各ストーリーは 1 回だけ返されます (彼らが所有するストーリーに関与している可能性が非常に高いため)。

ページに 1 つの配列が返されるように、2 つのクエリを結合する方法はありますか?

ティア

4

1 に答える 1

1

おそらく手動でクエリを使用する方がよいでしょう。試す:

$dsql->option('distinct');

たとえば、グリッドがある場合は、ビューのクエリを変更できます。

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

モデルが設定された後にこれを呼び出します。

于 2011-11-02T03:46:02.080 に答える