我有User
个实体ArrayCollection
Positions
。每个Position
都有user_id
属性。
现在我想从一个用户获得所有positions
(以获得所有我会做的$user->getPositions()
)与特定查询匹配,例如具有与当前日期匹配的日期属性。因此我想做$user->getCurrentPositions()
之类的事情,它应该返回与该用户相关的位置的子集。
这怎么可能?
编辑:
我真正想做的是在我的控制器中这样的事情:
$em = $this->getDoctrine()->getManager();
$users = $em->getRepository('fabianbartschWhereMyNomadsAtBundle:User')->findAll();
foreach ($users as $user) {
$positions = $user->getCurrentPositions();
foreach ($positions as $position) {
echo $position->getLatitude().'<br>';
}
}
我想迭代所有用户和每个想要拥有相关职位的用户。但是我认为这不可能来自存储库,因为我收到以下消息:Attempted to call method "getCurrentPositions" on class ...
答案 0 :(得分:2)
如果您使用的是Doctrine,则可以使用内置的Criteria API,该API专门用于此目的。
集合有一个过滤API,允许您从集合中分割部分数据。如果尚未从数据库加载集合,则过滤API可以在SQL级别上工作,以便对大型集合进行优化访问。
答案 1 :(得分:0)
好的,我发现了,确实可以使用存储库:
实体\ user.php的
/**
* @ORM\Entity(repositoryClass="fabianbartsch\WhereMyNomadsAtBundle\Entity\UserRepository")
* @ORM\Table(name="fos_user")
*/
class User extends BaseUser
{
实体\ UserRepository.php
/**
* UserRepository
*/
class UserRepository extends EntityRepository
{
public function getCurrentPositions()
{
$query = $this->getEntityManager()
->createQuery(
"SELECT p
FROM xxx:Position p
WHERE p.start <= '2014-08-17' AND p.end >= '2014-08-17'"
);
try {
return $query->getResult();
} catch (\Doctrine\ORM\NoResultException $e) {
return null;
}
}
}
在用户对象中,只有相关位置条目受查询影响,因此无需将用户实体与位置实体连接。非常简单,应该尝试在stackoverflow上发帖,sry guys:P