我有一个故事列表,在另一个表格中,有一组附加到这些故事的任务。
对于给定的用户,我想获得一个不同的故事编号列表,例如如果用户有多个任务,故事只列出一次。
我可以使用直接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的数据,我只想要返回两行(即使用户1在故事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
答案 0 :(得分:1)
最好手动使用查询。尝试:
$dsql->option('distinct');
您可以更改视图的查询,例如,如果您有网格,则:
$this->grid->dq->option('distinct');
在设置模型后调用此方法。