嗨,我需要比较理论中的两个对象。我有客户资料库和实体。这是我的代码,
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';
}
}
在我的表格中,我有这个值,
但是我总是没有。如果有人可以帮助
答案 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来实现更通用的方法,但是如果需要进行一些非平凡的比较,可能会带来一定程度的复杂性。