首先,我将给出一些伪代码示例,然后我将解释问题是什么.让我说我有两个实体User和Phonenumber.他们的关系是一对多的.在我的UserRepository中我可以有类似的东西:
class UserRepository { public function getUser($id,$type) { $users = $this->createQuery("SELECT u,p FROM User u JOIN u.phonenumbers p WHERE u.id = :id AND p.type = :type") ->setParameters(array( 'id' => $id,'type' => $type,)) ->getResult(); return $users[0]; } }
在我的应用程序,如果我有类似的东西:
$user = $userRepo->getUser(1,'home'); var_dump($user->getPhoneNumbers()); // here phonenumbers collection is ok $user = $userRepo->getUser(1,'work'); var_dump($user->getPhoneNumbers()); // Here phonenumbers collection is wrong. // It's exactly the same as the prevIoUs one.
所以我的问题是:是否可以使用获取连接(具有不同的标准)并且每次都能获得正确的集合?
获取加入和过滤集合不是很好地协同工作的东西.这是你应该怎么做的:
原文链接:https://www.f2er.com/php/444958.htmlSELECT u,p FROM User u JOIN u.phonenumbers p JOIN u.phonenumbers p2 WHERE u.id = :id AND p2.type = :type
这适用于第二次连接(而非水合)p2的过滤,这导致正确的水合和过滤.