获取具有0个联结表的实体

时间:2014-05-14 13:50:17

标签: breeze

我们有几个不同的实体。为了更好地解释,这里是示例结构:

我们有很多学生。 我们有很多家庭作业。 每个作业都有N(每个作业不同)的任务。 有一个连接学生和任务的联结表。

我们想在家庭作业中为某些学生分配一些任务。假设一个家庭作业有5个可能的任务,我们希望每个学生都能完成一项或多项任务。

目前,界面列出了所有具有一些属性的学生(对于这种情况,比如平均成绩,头发颜色,姓名,性别等),并且有5个复选框(选定的作业中有5个任务)。我们可以使用过滤器仅显示平均成绩为4的学生,或仅显示女学生等。

过了一段时间,你会指派98%的学生,但你注意到有2%的学生没有任何选择作业的任务(一些统计数据显示你)。我们不想通过所有的几千名学生,而是想创建使用现有过滤器的过滤器并应用额外的过滤器,这将显示所有学生,其中有0个任务,其中task.homeworkId = X

现在,在我脑海里有一个可能的解决方案,但我不确定这是否可以使用微风:

from students 
    where (OLD_FILTERS)
       and ((from junction_table 
           where task.homeworkId = selectedHomeworkId
                 and student.id = $parent_query.id).count() = 0)

我已经过了一段时间了,不能提出一个很好的清洁解决方案。我想到的只有一个非常复杂的解决方案,即在服务器上手动过滤所有学生属性和这个新条件。

提前感谢您的帮助。

修改

表格如下:

student - junction table = 1 to many

任务 - 联结表= 1到多(基本上,它是通过联结实体的多对多学生任务)

任务 - 家庭作业=多到1个(每个作业多个任务)

对模型的一些看法:

Student:
   Id
   Property1
   Property2
   ...

Homework
   Id
   Property1...

Task
   Id
   HomeworkId   // this is foreign key
   Property....


JunctionTable
   Id
   TaskId   // foreign key
   StudentId   // foreign key

1 个答案:

答案 0 :(得分:0)

感谢DenisK的帮助。我们使用旧版本的Breeze而没有所需的选项。解决方案是简单的谓词:

var pred = breeze.Predicate.create("studentTasks", "any", "task.homeworkId", "==", homeworkId).not();