我有一个问题,使用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();
我猜解决方案可能是:
按用户查找员工
通过该员工找到公司
获得那些公司的项目......
任何想法?
答案 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();
}
}