在symfony2中的教义2协会manytomany

时间:2014-07-17 11:36:51

标签: symfony doctrine-orm

我有一个问题,使用symfony2,doctrine

首先是我的模特和关系:

表:

1.company (has many employements, has many projects)
2.user (has many employements)
3.project (has one company)
4.employement (has one user, has one company)

(我知道用户< - >公司之间存在ManyToMany的可能性,但出于其他原因,我会使用额外的模型进行工作)

问题:项目/索引页面,我希望显示所有公司的所有项目,这些公司使用此用户,按创建时间排序。如您所见,用户可以同时在更多公司工作。

在我的控制器中,我得到了所有这样的项目:

$projects = $this->getDoctrine()
    ->getRepository('AcmeDemoBundle:Projects')
    ->findAll();

我猜解决方案可能是:

按用户查找员工

通过该员工找到公司

获得那些公司的项目......

任何想法?

1 个答案:

答案 0 :(得分:0)

您的解决方案似乎正确,但您可能需要创建一个带连接的自定义存储库类,以明确告诉Doctrine获取关系(无代理)。

请参阅Databases and Doctrine (The Symfony Book)Doctrine Query Language — Doctrine 2 #joins

示例:

use Doctrine\ORM\EntityRepository;

class EmployementRepository extends EntityRepository
{
    public function findWithJoins($user) {
        $qb = $this->createQueryBuilder('e');
        $qb->leftJoin('e.company', 'e')
            ->addSelect('e')
            ->where('e.user = :user')
            ->setParameter('user', $user);
        return $qb->getQuery()->getResults();
    }
}