【发布时间】:2020-07-23 14:05:57
【问题描述】:
我正在开发一些 API 平台项目。
我正在使用我的 API 点 /references 来获取一些包含子实体的数据。
但问题是我使用 Doctrine 扩展来过滤我的列表。使用这个扩展,我可以过滤我得到的引用。
但是在子实体 Stock 中我仍然有一些我不想要的数据。
我的目标是获得所有拥有warehouse.owner = $owner 的股票。
代码如下:
private function addWhere(QueryBuilder $queryBuilder, string $resourceClass): void
{
if ($this->security->isGranted('SCOPE admin') || !$this->security->isGranted('SCOPE logistician')) {
return;
}
/** @var Client $client */
$client = $this->security->getUser();
$rootAlias = $queryBuilder->getRootAliases()[0];
switch ($resourceClass) {
case Entry::class:
case Inventory::class:
$queryBuilder->join(sprintf('%s.stock', $rootAlias), 's');
break;
case Reference::class:
// I'm here
$queryBuilder->join(sprintf('%s.stocks', $rootAlias), 's');
break;
default:
return;
break;
}
$queryBuilder->join('s.warehouse', 'w', Expr\Join::WITH, 'w.owner = :owner');
$queryBuilder->setParameter('owner', $client->getSubject());
}
这是回复:
{
"@id": "/stock/references/7a00e32f-1195-43e6-a5d1-f75d64471112",
"@type": "Reference",
"id": "7a00e32f-1195-43e6-a5d1-f75d64471112",
"quantityAvailable": 75,
"quantitiesOnHand": 100,
"quantityOfExpectedEntries": -25,
"archived": false,
"stocks": [
{
"@id": "/stock/stocks/214d9b27-d2c8-45e5-9d67-10985291022a",
"@type": "Stock",
"quantityOnHand": 50,
"lastCountedEntryWasCreatedAt": "2020-07-23T10:04:32+02:00",
"warehouse": {
"@id": "/stock/warehouses/3a61275f-4b20-4061-a64e-52783cf4d892",
"@type": "Warehouse",
"id": "3a61275f-4b20-4061-a64e-52783cf4d892",
"owner": "9001",
"name": "Adams-Reichel",
"createdAt": "2020-07-23T10:04:32+02:00"
},
"createdAt": "2020-07-23T10:04:32+02:00"
},
{
"@id": "/stock/stocks/6f2a0542-d65d-489a-b96c-c8658ff195ea",
"@type": "Stock",
"quantityOnHand": 50,
"lastCountedEntryWasCreatedAt": "2020-07-23T10:04:32+02:00",
"warehouse": {
"@id": "/stock/warehouses/cc8f3267-29b6-4ad5-9f8b-74b98aab85d6",
"@type": "Warehouse",
"id": "cc8f3267-29b6-4ad5-9f8b-74b98aab85d6",
"owner": "9002",
"name": "Steuber, Ruecker and Vandervort",
"createdAt": "2020-07-23T10:04:32+02:00"
},
"createdAt": "2020-07-23T10:04:32+02:00"
}
],
"createdAt": "2020-07-23T10:04:32+02:00"
},
如何仅使用我的扩展程序和 DQL 过滤子实体结果?谢谢
【问题讨论】:
标签: php symfony doctrine-orm symfony4 api-platform.com