I'm working on some API Platform project.I 'm using my API point /references
to get some data containing subentities.
But the issue is that I use a Doctrine extension to filter my list. Using this extension I can filter which references I get.
But in the subentity Stock I stil have some data that I dont want.
My goal is to get all stocks that have the warehouse.owner = $owner.
Here is the code :
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());}
Here is the response :
{"@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"},
How can I filter the subentity result by just using my extension and DQL ? Thanks