Doctrine реализует шаблон IdentityMap
, который гарантирует, что вы всегда получаете один и тот же объект для одной и той же строки базы данных, но только если он был загружен из карты идентификации .
В вашем случае вы сравниваете некоторый произвольный объект с объектом, выбранным из базы данных, используя оператор сравнения PHP.Другими словами, вы проверяете, равны ли 2 объекта, но в PHP такой встроенной функциональности нет.
Вы должны самостоятельно реализовать функцию сравнения объектов, чтобы достичь своей цели, поскольку реальная логика сравнения может различаться.
ОБНОВЛЕНИЕ: Простейшим примером сравнения в вашем случае является свойство-сравнение по свойствам:
private function compare(Customer $a, Customer $b)
{
return $a->getTitle() === $b->getTitle() &&
$a->getName() === $b->getName() &&
$a->getLastName() === $b->getLastName();
}
Также может быть целесообразно переместить этот метод непосредственно в Customer
сущность с именем, подобным isEqual()
.
Также возможно реализовать более универсальныйПодход с использованием отражения , но это может принести определенный уровень сложности в случае, если потребуется участие в некоторых нетривиальных сравнениях.