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)
在我的表中,我有这个值,
但我总是没有。如果有人可以提供帮助,那就太好了
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()
.
也可以通过使用反射来实现更通用的方法,但如果需要涉及一些非平凡的比较,它可能会带来一定程度的复杂性。