主义比较两个对象

时间:2019-02-07 09:40:14

标签: 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';
        }
    }

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

enter image description here

但是我总是没有。如果有人可以帮助

1 个答案:

答案 0 :(得分:4)

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的{​​{1}}实体中也是值得的。

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