私はSymfony 3とdoctrine 2.5を使用しています。 3つのテーブルは、合計あります:MySQLとDoctrine QueryBuilder 3つのテーブルから複数の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
は企業ID 2を考えると、最終的な結果は、このする必要がありますが、私の人生のために私はそれ
1 company2 - Alex
2 company2 - Jim
の作業ドクトリンQueryBuilderメソッドを記述することはできません私は3つの作業を持っています私の望む結果をもたらすMySQLのクエリ。 私の人生のために、私はそれを少なくとも1つの動作する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;
Doctrineの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 = companies.id'' - > '' cu.company_id = c.id'' –