【发布时间】:2016-06-08 02:24:28
【问题描述】:
我正在尝试使用方法 ArrayCollection::contains 来查找对象是否已经在我的集合中,但是当我这样做时:
//My ArrayCollection
$lesRoles = $drt->getDrtApplication()->getRoles();
$leRole = $lesRoles->first();
echo "Property appNom : ".$leRole->getRleApplication()->getAppNom()."// Property appRole : ".$leRole->getRleId()." <br>";
$role = new \Casgaya\Role(2,$drt->getDrtApplication());
echo "Property appNom : ".$role->getRleApplication()->getAppNom()."// Property appRole : ".$role->getRleId()." <br>";
var_dump($lesRoles->contains($role));
结果是:
属性 appNom : CORA// 属性 appRole : 2
属性 appNom : CORA// 属性 appRole : 2
布尔(假)
由于 appNom 和 rleId 是实体 Role 拥有的仅有的两个属性,因此我希望它会返回 true。
编辑新的测试用例:
echo "Test object role : <br>";
var_dump($lesRoles==$role);
echo"<br>";
echo "Test integer property rleID from object role : <br>";
var_dump($role->getRleId() == $leRole->getRleId());
echo"<br>";
echo "Test Application object property RleApplication from object role : <br> ";
var_dump($role->getRleApplication() == $leRole->getRleApplication());
结果是:
属性 appNom : CORA// 属性 appRole : 2
属性 appNom : CORA// 属性 appRole : 2
测试对象角色 :
bool(false)
从对象角色测试整数属性 rleID:
bool(true)
从对象角色测试应用程序对象属性 RleApplication :
布尔(真)
请注意,当我测试两个属性的相等性时,它们都为真。但是当我测试整个对象的相等性时,它是错误的。
所以问题不再是关于 ArrayCollection::contains 的问题,而是:
在相等的情况下,两个学说实体的比较标准是什么?
【问题讨论】:
-
为什么你认为它应该返回true?你最好创建一个简单的 ArrayCollection,放一个你想要的角色,然后检查集合是否包含这个角色(如果你想检查它是如何工作的)。看起来您刚刚创建的 $role(角色的新实例)无法在集合中 - 只是因为它刚刚被实例化。
-
这只是一个测试用例,我创建了一个我知道已经在arrayCollection 中的对象。而且它们都具有完全相同的属性。
-
你刚刚创建了它,你希望它在你刚刚初始化的集合中。
标签: php doctrine-orm contains equality arraycollection