Это очень странный случай, я попытаюсь объяснить с помощью нескольких примеров объектов.
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.
Почему это случилось? Это точно то же свойство, которое он возвращает.