如何在ManagedSet上使用WHERE?

时间:2019-02-13 13:39:52

标签: orm dart aqueduct

我有一个多对多关系,有PPFF,我想使用P到{{1 }}。喜欢:

F

和类:

PF

如何过滤?

2 个答案:

答案 0 :(得分:0)

可以使用自己的查询,该查询将保留在where上:

..predicate = QueryPredicate(
          " exists (select f.cod from pf where pf.fcod = @fcod and pf.pcod = p.cod) ",
          { "fcod": 1 });

如果在代码查询中使用join,则表名将更改。

答案 1 :(得分:0)

QueryPredicate 不是一个很好的解决方案,因为您不能在连接表中设置条件(我们不知道连接表的别名)。我创建了自己的程序 - 试试看:

    QueryExpression<dynamic, dynamic> RelationWhereExt(Query query, List<String> links) {
    ManagedEntity e = query.entity;
    KeyPath path;

    ManagedPropertyDescription property;
    links.forEach((link) {
      property = e.properties[link];
      if (path==null){
        // рутовое условие
        path = KeyPath(property);
      } else {
        // следующие условия
        path.add(property);
      }

      if (property is ManagedRelationshipDescription) {
        e = (property as ManagedRelationshipDescription).destinationEntity; // меняем entity
      }
    });

    QueryExpression<dynamic, dynamic> queryExpression = QueryExpression<dynamic, dynamic>(path);
    (query as MySqlQuery).expressions.add(queryExpression);

    return queryExpression;
  }

在你的情况下: RelationWhereExt(query, ['pfSet', 'f']).isNotNull();