我正在使用Symfony 3和教义2.5。总共有三张表:
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,最终结果应该是这样,但就我个人而言,我无法为它编写一个有效的原则QueryBuilder方法
1 company2 - Alex
2 company2 - Jim
我有三个可以工作的MySQL查询,它们为我带来了想要的结果。但就我的一生而言,我无法将任何一个问题转换成至少一个工作原理问题。
使用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();
对Symfony 3和条令2.5的queryBuilder有效的正确答案。
$query = $this->_em->createQueryBuilder()
->select('u.username', 'c.name', 'c.id')
->from('AppBundle\Entity\User','u')
->leftJoin('AppBundle\Entity\CompanyUsers', 'cu', 'WITH', 'cu.user = u.id')
->leftJoin('AppBundle\Entity\Companies', 'c', 'WITH', 'cu.company = c.id')
->where('u.id = :userId')
->setParameter('userId', $userId)
->getQuery()
->getResult();
$result = [];
$result['userName'] = $query[0]['username'];
$result['userId'] = $userId;
$result['companies'] = [];
foreach ($query as $q) {
$result['companies'][] = array('companyName' => $q['name'], 'companyId' => $q['id']);
}
return $result;
为什么不在连接条件中使用别名<代码>“company\u users.company\u id=companys.id”-
左连接语法与您使用的语法不同。
公共函数leftJoin($连接,$别名,$条件类型=null,$条件=null,$indexBy=null);
固定建造商
->select('u.username', 'c.name')
->from('companies','c')
->leftJoin('company_users', 'c', 'WITH', 'cu.company_id = c.id')
->leftJoin('user', 'u', 'WITH', 'cu.user_id = u.id')
->where('c.id = :companyId')
->setParameter('companyId', $companyId)
->getQuery()
->getResult();
如果我有三个表: > 列出所有未被查看的正确方法是什么?此查询是否正确? 按< code>user_id列出所有< code >帖子及其“查看状态”如何? 您是否也可以推荐一个很棒的(用户友好的、非极客的)资源来提高我对LEFT JOIN、CROSS JOIN和(正常连接?从帖子、视图中选择*)的理解? 谢谢大家!
问题内容: 我想通过内部联接从更多表中选择数据。 这些是我的桌子。 我想写一份声明,显示学生去过哪个考试,年级和日期。日期后排序。 这是我的声明。它可以运行,但是我想确保自己做的正确。 问题答案: 几乎正确..查看联接,您引用的字段错误
问题内容: 我有三个表名为 现在要显示学生姓名和他所学习的课程名称, 我建立以下查询 但是它不会返回所需的结果… 如果我想找到谁是其他经理,那么归一化表格将是什么: 并希望得到以下结果: 问题答案: 只需使用:
问题内容: 我从来没有做过这样的PHP / MYSQL技巧来加入多表。请具有该领域经验的人员帮助: TICKETS 表中的字段: 表 RECEPTS中的 字段: 表 PAYMENTS中的 字段: 表 CUSTOMERS中的 字段: 表之间的关系很容易理解: 我希望达到的最终结果: 我试图做这样的事情,但在某个地方出错: 问题答案: 您应该可以使用以下方法获得结果: 参见带有演示的SQL Fiddl
问题内容: 好的,这是。我有两个表:product和product_sizes 所以基本上我的产品表具有id(主键),名称(产品名称)和size_id(product_sizes中的外键) 我的product_sizes表具有预定值: 在这里,我有一个有效的代码来显示产品表(使用while代码以html格式): 我的问题是我想显示(用html表示)尺寸名称而不是其size_id,类似于以下示例:
我有下面三张表,希望从中获得以下选择: 1。)从中选择所有项目,并在中按对给定用户进行分组 这意味着当用户登录时,他将看到属于他所属组的所有(且仅限于)项目 2.)对于每个,选择所有协作项目 这意味着当用户从上面的1中选择任何组()时,他将看到属于所选组()的所有项目 约束:每个用户必须是组成员。表用于提供用户的和 这是我尝试过的,但是没有用 这是桌子 谢谢你的意见!