【发布时间】:2018-07-20 13:43:02
【问题描述】:
我正在使用 Symfony 4 + Api 平台。我有一个实体(保险),它与另一个实体(MediaObject)相关。当我尝试获取某个保险项目时,它会返回与其相关的所有 MediaObjects 项目。但是,我不想返回所有的 MediaObjects。我需要 DeleteAt 为 null 的 MediaObjects。
我该如何解决这个问题?
我有一个我编码的 DoctrineExtension:
$queryBuilder->join(sprintf('%s.mediaObjects', $rootAlias), 'mo');
$queryBuilder->andWhere(sprintf('%s.deletedAt IS NULL', $rootAlias));
$queryBuilder->andWhere('mo.deletedAt IS NULL');
但什么也没发生。它仍在返回所有项目。
[
{
"id": 1,
"mediaObjects": [
{
"id": 5,
"mimetype": "image/jpeg",
"type": "INSURANCE",
"createdAt": "2018-07-20T09:36:05+02:00",
"updatedAt": "2018-07-20T09:36:05+02:00",
"deletedAt": "2018-07-20T14:20:34+02:00"
},
{
"id": 10,
"mimetype": "image/jpeg",
"type": "INSURANCE",
"createdAt": "2018-07-20T11:01:38+02:00",
"updatedAt": "2018-07-20T14:04:42+02:00",
"deletedAt": "2018-07-20T14:20:34+02:00"
},
{
"id": 4,
"mimetype": "image/jpeg",
"type": "INSURANCE",
"createdAt": "2018-07-20T09:35:56+02:00",
"updatedAt": "2018-07-20T14:04:00+02:00",
"deletedAt": "2018-07-20T14:15:09+02:00"
},
{
"id": 6,
"mimetype": "image/jpeg",
"type": "INSURANCE",
"createdAt": "2018-07-20T09:36:13+02:00",
"updatedAt": "2018-07-20T14:15:49+02:00",
"deletedAt": null
}
],
"expirationDate": "2018-07-19T08:25:29+02:00",
"policy": "Verduras",
"producerName": "Aseguradoras S.L.",
"contactEmail": "testsingfact+aseguradora1@gmail.com",
"contactPhone": "700000001",
"quantity": 1200,
"type": "CARGO",
"coverageExceptions": "Caidas",
"createdAt": "2018-07-19T10:27:22+02:00",
"updatedAt": "2018-07-19T13:06:31+02:00",
"deletedAt": null
}
]
【问题讨论】:
-
您可以在问题中添加完整的查询代码而不是那 3 行吗?此外,如果您将
$queryBuilder->getDQL()的结果添加到问题中,这将非常有用。 -
我无法访问查询,我的意思是,查询在 Api Platform 核心上。我想我可以添加一些句子来使用 DoctrineExtesion (api-platform.com/docs/core/extensions) 重新定义该查询,这就是那些行。不管怎样,我明天打印 $queryBuilder->getDQL() 并粘贴到这里。
-
好的。等待你的 DQL
-
我终于用你的命令得到了 dql,句子是“SELECT o, mediaObjects_a1 FROM App\Entity\App\Insurance o LEFT JOIN o.mediaObjects mediaObjects_a1 WHERE o.corporate = :corporate AND o. deletedAt IS NULL ORDER BY o.id ASC”。基于此,我添加了 $queryBuilder->andWhere('mediaObjects_a1.deletedAt IS NULL');这正在工作^^。谢谢。无论如何,我不知道这是否是最好的方法,因为我不知道别名“mediaObjects_a1”是否始终相同。
标签: symfony symfony4 api-platform.com