Учение сравнивает два объекта - PullRequest
0 голосов
/ 07 февраля 2019

Привет, мне нужно сравнить два объекта в учении.У меня есть клиентское хранилище и сущность.Это мой код,

 public function index(CarAdRepository $carAdRepository, CustomerRepository $customerRepository): Response {
        $cus = $customerRepository->findAll();
        $customer = new Customer();
        $customer->setTitle('Mr');
        $customer->setName('aaa');
        $customer->setLastName('bbb');
        if($customer == $cus[0]){
            echo 'ddd';
        }else{
            echo 'no';
        }
    }

в моей таблице у меня есть эти значения,

enter image description here

Но я всегда получаю нет.Было бы здорово, если кто-то может помочь

1 Ответ

0 голосов
/ 07 февраля 2019

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().

Также возможно реализовать более универсальныйПодход с использованием отражения , но это может принести определенный уровень сложности в случае, если потребуется участие в некоторых нетривиальных сравнениях.

...