use*_*227 5 symfony doctrine-orm
我想在我的Doctrine2存储库类中创建一个方法,它接受一个QueryBuilder并添加一些额外的子句,其中一个是内连接.
如何找出用于实例化querybuilder的表别名?这是可发现的还是整个代码库中的约定(因此是潜在的错误来源)?
我的客户代码是:
public function getPasswordAction($id)
{
$user = $this->get('security.context')->getToken()->getUser();
$repository = $this->getDoctrine()
->getRepository('TenKPwLockerBundle:Password');
$query = $repository->createQueryBuilder('p')
->where('id = :id')
->setParameter('id', $id);
$query = $repository->userCanReadRestriction($query, $user);
...
Run Code Online (Sandbox Code Playgroud)
我的存储库类包含:
public function userCanReadRestriction(\Doctrine\ORM\QueryBuilder $builder, \TenK\UserBundle\Entity\User $user)
{
// where can I get 'p' from?
return $builder->innerJoin('p.shares', 's')
->where('createdBy = :creator')
->orWhere('s.toUser = :toId')
->setParameters(array('creator' => $user, 'toUser' => $user));
}
Run Code Online (Sandbox Code Playgroud)
实际上,在上面的代码中,我如何确认QueryBuilder是否正在使用密码实体?
QueryBuilder对象有两个相关的方法: - getRootAliases() - getRootEntities()
在具有from子句集的QueryBuilder上调用getRootAliases 将返回所有别名的数组; 类似地,调用getRootEntities将返回所选实体的缩短类名的数组.
$qb = $em->createQueryBuilder();
$qb->from('BundleName:EntityName', 'entityName');
var_dump($qb->getRootAliases()); // returns ['entityName']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8638 次 |
| 最近记录: |