Doctrine 比较两个对象

vim*_*uth 0 symfony doctrine-orm

嗨,我需要比较教义中的两个对象。我有客户存储库和实体。这是我的代码

 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';
        }
    }
Run Code Online (Sandbox Code Playgroud)

在我的表中,我有这个值,

在此处输入图片说明

但我总是没有。如果有人可以提供帮助,那就太好了

Fly*_*ing 6

Doctrine 实现的IdentityMap模式可确保您始终为同一数据库行接收相同的对象,但前提是它是从 identity map 加载的

在您的情况下,您正在将一些任意对象与使用 PHP 比较运算符从数据库中获取的实体进行比较。换句话说,您正在检查 2 个对象是否相等,但 PHP 中没有这样的内置功能。

您必须自己实现对象比较功能才能实现您的目标,因为实际比较逻辑可能会有所不同。

更新: 在您的情况下,最简单的比较示例是逐个属性的比较:

private function compare(Customer $a, Customer $b)
{
    return $a->getTitle() === $b->getTitle() &&
        $a->getName() === $b->getName() &&
        $a->getLastName() === $b->getLastName();
}
Run Code Online (Sandbox Code Playgroud)

将此方法直接移动到Customer名称为isEqual().

也可以通过使用反射来实现更通用的方法,但如果需要涉及一些非平凡的比较,它可能会带来一定程度的复杂性。