Sil*_*ody 4 php equality contains arraycollection doctrine-orm
我试图使用方法ArrayCollection :: contains来查找对象是否已经在我的Collection中,但是当我在做什么时:
//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));
Run Code Online (Sandbox Code Playgroud)
结果是:
属性appNom:CORA //属性appRole:2
属性appNom:CORA //属性appRole:2
bool(false)
由于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());
Run Code Online (Sandbox Code Playgroud)
结果是:
属性appNom:CORA //属性appRole:2
属性appNom:CORA //属性appRole:2
测试对象角色:
bool(false)
从对象角色测试整数属性rleID:
bool(true)
测试应用程序对象属性RleApplication from object role:
bool (真正)
请注意,当我测试两个属性的相等性时,它们都是真的.但是当我测试整个对象的相等性时,它是错误的.
所以问题不再是关于ArrayCollection :: contains,而是它:
在相同的情况下,比较两个学说实体的标准是什么?
我自己找到了解决方案,这里是针对有同样问题的人:
我使用的方法是ArrayCollection :: exists而不是contains,所以我可以指定在哪个条件下建立对象之间的相等性:
就我而言:
$result = $lesRoles->exists(function($key,$element) use ($role)
{
return ($element->getRleApplication() == $role->getRleApplication() && $role->getRleId() == $element->getRleId());
});
Run Code Online (Sandbox Code Playgroud)
请注意,此处$ key和$ element是从集合中测试的当前对象.