2011-11-01 25 views
1

我有一個定義的故事列表,在另一個表中有一組附加到這些故事的任務。在ATK4中,我如何修改模型以獲得DISTINCT列表

對於一個給定的用戶,我想得到一個明確的故事編號列表,例如如果用戶有多個任務,故事只會列出一次。

我可以用一個直接的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,則i只想兩行返回(即使用戶之一具有在故事兩個任務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 

我會得到一個成員負責的故事以及他們所涉及的故事的列表。工會採取獨特的排序方式,每個故事只返回一次(因爲它很可能涉及他們自己的故事),但也可能有他們參與的故事,但其他人負責。

有沒有辦法將兩個查詢聯合在一起,所以我得到一個數組返回的頁面?

TIA

+1

您可以嘗試覆蓋dsql()並實時更改請求。 – romaninsh

+0

有沒有辦法在模型中指定它? - 如果沒有,那麼我可以直接把一個SQL直接放在頁面中,並填充我想要的數據,但想檢查是否有一種方法,我可以添加到鏈條,我addConditions到模型。不用擔心 - 仍然試圖確定框架中的邊界以及它的功能已經超出我的預期。謝謝 –

+0

是的,我不會惹模型。 – romaninsh

回答

1

你可能最好使用手動查詢。嘗試:

$dsql->option('distinct'); 

您可以更改您的視圖的查詢,例如,如果你有一個網格,然後:

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

電話之後的型號尚未確定。

+0

如果我有幾個查詢聯合在一起,有沒有辦法從查詢中取回單個數組?例如。 「SELECT id,name,xxx from stories_planned UNION select id,name,xxx from stories_involved」,然後在頂部應用不同的選項? –

+1

甲骨文破壞人們! :) $ myquery = $ dsql-> select()。' UNION'。$ dsql2->選擇(); $ this-> api-> db-> getAllHash($ myquery); – romaninsh

+0

:)我在想也許是讓mysql做這個工作,這意味着我只是創建一個查詢視圖,並根據addConditions在member_id的頁面中創建一個基於視圖的新模型。保持代碼乾淨和簡單,使用MVC,應該工作正常。謝謝 –

相關問題