/**
  * Add Filters for parent resource
  *
  * @param FilterBuilder $builder
  */
 protected function addFiltersForParentResources(FilterBuilder $builder)
 {
     if ($parentResource = $this->apiResource->getParentResource()) {
         $qb = $builder->getQueryBuilder();
         $em = $qb->getEntityManager();
         $rootEntity = $qb->getRootEntities()[0];
         $this->addFilterForParent($builder, $rootEntity, $em, $parentResource);
     }
 }
 /**
  * @param ApiResource $apiResource
  * @param Request $request
  * @return ApiResource[]
  */
 protected function getParentResources(ApiResource $apiResource, Request $request)
 {
     $parents = [];
     if ($parentResource = $apiResource->getParentResource()) {
         $id = $request->attributes->get($parentResource->getRoutePlaceholder());
         $parentResource->setIdentifierValue($id);
         $parents[] = $parentResource;
         foreach ($this->getParentResources($parentResource, $request) as $parentsParent) {
             $id = $request->attributes->get($parentsParent->getRoutePlaceholder());
             $parentsParent->setIdentifierValue($id);
             $parents[] = $parentsParent;
         }
     }
     return $parents;
 }
 /**
  * @param ApiResource $apiResource
  * @param array $searchParams
  * @param bool $public
  * @return array
  */
 private function getParams(ApiResource $apiResource, $searchParams = [], $public = false)
 {
     if ($parentResource = $apiResource->getParentResource()) {
         $key = $public ? $apiResource->getAssocParent() : FilterDecorator::getFilterName($parentResource);
         $searchParams[$key] = $parentResource->getIdentifierValue();
         $searchParams = array_merge($searchParams, $this->getParams($parentResource, $searchParams, $public));
     }
     return $searchParams;
 }