Странная проблема с отношениями сущностей в Symfony 4 - PullRequest
0 голосов
/ 20 марта 2020

Это очень странный случай, я попытаюсь объяснить с помощью нескольких примеров объектов.

class Property{

    /**
     * @var string
     * @ORM\Column(type="string", length=10)
     */
    private $postCode;


    /**
     * @var InstructionToSell
     * @ORM\OneToOne(targetEntity="App\Entity\InstructionToSell")
     * @ORM\JoinColumn(nullable=true)
     */
    private $instructionToSell;

}

class InstructionToSell{

    /**
     * @var Property
     * @ORM\OneToOne(targetEntity="App\Entity\Property")
     * @ORM\JoinColumn(nullable=true)
     */
    private $property;

}

Таким образом, у двух примеров объектов свойство может иметь инструкцию на продажу объекта и наоборот. Тогда у меня есть очень простой c метод поиска по почтовому индексу в репо:

/**
     * @param string $postCode
     * @return array|null
     */
    public function searchByPostcode(string $postCode) : ?array{

        $builder = $this->createQueryBuilder('p');

        $builder->where(
            $builder->expr()->like('p.postCode',':postCode')
        )->setParameter('postCode',str_replace(' ','','%'.$postCode.'%'));

        return $builder->getQuery()->getResult();
    }

Все работает отлично, за исключением одной очень странной вещи. Если, скажем, свойство имеет почтовый индекс в Великобритании «YO12 7YA», и мы запускаем поиск «YO127YA», то оно возвращает результат, но если мы используем «YO12 7YA», оно возвращает результат, но инструкция TOSell равна нулю на свойство, но оно не равно нулю, если я удаляю пробел из условия поиска.

Я знаю, что этот поиск не самый лучший в его нынешнем виде, нужно также убрать пробелы из столбца, но Я хочу сказать, что один и тот же код выполняется для «YO12 7YA» и «YO127YA», который возвращает одно и то же свойство, но у одного из них есть отношение, соответствующее инструкции на продажу, а у другого - null.

Почему это случилось? Это точно то же свойство, которое он возвращает.

...