Я использую Symfony 3 и doctrine 2.5. Там три таблицы всего:MySQL и Doctrine QueryBuilder Несколько LEFT и INNER JOINS из трех таблиц
a. user table:
id name
1 Alex
2 Jim
3 Bob
b. companies table
id name
1 company1
2 company2
c. company_users containing the relationship, both user_id and company_id.
id company_id user_id
1 1 1
2 2 1
3 2 2
Данная компания идентификатор 2, Конечный результат должен быть, но для жизни меня я не могу написать метод работы Доктрина QueryBuilder ибо она
1 company2 - Alex
2 company2 - Jim
У меня есть три рабочих MySQL запросов, которые приносят мне желаемый результат. НО для жизни меня я не могу перенести ни одно из них, по крайней мере, в один рабочий запрос Doctrine.
Рабочая MySQL запросов (которые, возможно, будет на самом деле помочь некоторым пользователям здесь):
SELECT companies.name, user.username
FROM companies
LEFT JOIN company_users ON company_users.company_id = companies.id
LEFT JOIN user ON company_users.user_id = user.id WHERE companies.id = 2;
SELECT u.username, c.name
FROM user u, company_users cu, companies c
WHERE cu.user_id = u.id and cu.company_id = c.id and c.id = 2
SELECT companies.name, user.username
FROM companies
LEFT JOIN company_users
INNER JOIN user
ON company_users.user_id=user.id
ON company_users.company_id=companies.id WHERE companies.id=2;
Моя попытка QueryBuilder Доктрины в:
->select('u.username', 'c.name')
->from('companies','c')
->leftJoin('c', 'company_users', 'cu', 'company_users.company_id = companies.id')
->leftJoin('u', 'user', 'u', 'company_users.user_id = user.id')
->where('c.id = :companyId')
->setParameter('companyId', $companyId)
->getQuery()
->getResult();
Почему вы не используете псевдонимы в условиях соединения? '' company_users.company_id = company.id'' -> '' cu.company_id = c.id'' –