Доктрина сравнения двух объектов

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

 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';
        }
    }

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

Доктрина сравнения двух объектов

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
3 112
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Большое спасибо, но есть ли пример, который я могу просмотреть? Извините, я немного новичок в этом :(

vimuth 07.02.2019 10:57

Другие вопросы по теме