【问题标题】:Symfony - Doctrine Custom Query For Loading Associate Mapping EntitySymfony - 用于加载关联映射实体的 Doctrine 自定义查询
【发布时间】:2017-02-19 03:06:48
【问题描述】:

我怎样才能自定义关于学说关联映射负载的查询?

假设

  1. 数据库中有两个表,用户和项目
  2. item表中有一个名为is_deleted(boolean)的属性,当值设置为true表示被删除。
  3. 使用 Symfony3 设置项目

场景

例如,我有 2 个实体类,即用户和项目。这两个实体之间的关系是一对多(每个用户可以拥有许多项)。

当我尝试获取用户时,相关的项目也会被加载(懒惰、急切、额外懒惰)给该用户。

我尝试实现的是自定义关联映射加载,其中仅加载 is_deleted 等于 false 的项目。我该怎么做?

非常感谢您的帮助。

【问题讨论】:

    标签: php doctrine-orm symfony


    【解决方案1】:
    $em->createQueryBuilder()
       ->select('Item')
       ->from('XYZBUNDLE:Item', 'Item')
       ->leftJoin('XYZBUNDLE:User', 'User')
       ->where('Item.is_deleted', ':is_deleted')
       ->andWhere('User.id', ':userId')
       ->setParameter('is_deleted', false)
       ->setParameter('userId', 1)
    ->getQuery()->getResult();
    

    如果您想获取所有用户的所有结果,您可以在此处删除用户的 where 条件。

    【讨论】:

    • 您好,感谢您的帮助。我知道这个查询可以帮助消除值等于 true 的项目。但是,它在关联加载时可行吗?这意味着当我加载我的用户时,自动加载的项目 is_deleted 等于 false。
    • 它也适用于非关联你可以使用它像 ->from('XYZBUNDLE:Item', 'Item') ->leftJoin('XYZBUNDLE:User', 'User', 'Item .user_id = User.id')
    【解决方案2】:

    你可以使用 Doctrine 的过滤系统,Maybe。

    http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/filters.html

    我没试过。

    【讨论】:

      猜你喜欢
      • 2014-09-30
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-05
      • 1970-01-01
      相关资源
      最近更新 更多