在我的应用程序中,如果我有这样的东西: p>
$ user = $ userRepo-> getUser(1,'home'); var_dump($ user-> getPhonenumbers()); //这里phonenumbers集合是ok $ user = $ userRepo> getUser(1,'work'); var_dump($ user-> getPhonenumbers()); //这里phonenumbers收藏是错误的。 //与前一个完全一样。所以我的问题是:是否可以使用提取连接(具有不同的条件)每次正确收集?
解决方案获取加入和过滤集合并不是很好地协同工作。以下是您应该如何做:
SELECT u,p FROM 用户u JOIN u.phonenumbers p JOIN u.phonenumbers p2 WHERE u.id =:id AND p2 .type =:type这对第二个加入(而不是水合)应用过滤器 p2 ,这会导致正确的水合和过滤。
First I will give an example with some pseudo code and then I will explain what is the problem. Let me say I have two entities User and Phonenumber. Their relation is one-to-many. In my UserRepository I can have something like that:
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]; } }In my app if I have something like:
$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.So my questions is: Is it possible to use fetch join (with different criteria) and to get the proper collection each time?
解决方案Fetch joining and filtering a collection are not things that work together quite well. Here's how you should do it:
SELECT u, p FROM User u JOIN u.phonenumbers p JOIN u.phonenumbers p2 WHERE u.id = :id AND p2.type = :typeThis applies filtering on the second joined (and not hydrated) p2, which results in correct hydration and filtering.
更多推荐
学说撷取加入
发布评论