<?php
use Doctrine\ORM\Mapping as ORM;
use MonterHealth\ApiFilterBundle\Annotation\ApiFilter;
use MonterHealth\ApiFilterBundle\Filter\SearchFilter;
/**
* @ORM\Entity(repositoryClass=UserRepository::class)
* @ApiFilter(SearchFilter::class, properties={
* "address"
*
* }) */
class User
{
/** @ORM\Embedded(class = "Address") */
private $address;
}
<?php
use Doctrine\ORM\Mapping as ORM;
use MonterHealth\ApiFilterBundle\Annotation\ApiFilter;
use MonterHealth\ApiFilterBundle\Filter\SearchFilter;
/** @ORM\Embeddable */
class Address
{
/** @ORM\Column(type = "string") */
private $street;
/** @ORM\Column(type = "string") */
private $postalCode;
/** @ORM\Column(type = "string") */
private $city;
/** @ORM\Column(type = "string") */
private $country;
}
<?php
namespace App\Controller;
use App\Repository\UserRepository;
use MonterHealth\ApiFilterBundle\MonterHealthApiFilter;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class UserController extends AbstractController
{
/**
* @Route("users", name="get_users", methods={"GET"})
* @param Request $request
* @param UserRepository $repository
* @param MonterHealthApiFilter $monterHealthApiFilter
* @return JsonResponse
* @throws \ReflectionException
*/
public function getBooks(Request $request, UserRepository $repository, MonterHealthApiFilter $monterHealthApiFilter): JsonResponse
{
$queryBuilder = $repository->findAllQueryBuilder();
$monterHealthApiFilter->addFilterConstraints($queryBuilder, $repository->getClassName(), $request->query);
return new JsonResponse($queryBuilder->getQuery()->getArrayResult());
}
}
now after everything it is in place we invoke the api and what we expect it i to obtain users filtered by address.city = "Rome"
what happens in reality it is that the filter it is simply ignored or confused with a join.