我正在学习symfony和学说,并创建了一个简单的网站,但我在这一步卡住了。
我有两张table: users
以及 languages
用户包含:id、用户名。。。
语言包含:用户id、语言。。。
这是两人的照片
现在我正在尝试通过语言获取,比如:获取同时使用这两种语言的用户 english
和 french
结果将返回用户id 2
在普通php中,我可以使用pdo进行内部连接,但是我试图遵循原则语法,这不会返回正确的结果
public function getMatchingLanguages ($a, $b) {
return $this->createQueryBuilder('u')
->andWhere('u.language = :val1 AND u.language = :val2')
->setParameter('val1', $a)
->setParameter('val2', $b)
->getQuery()
->execute();
}
我在我的控制器中调用这个方法,查询是非常基本的,因为我找不到如何按照我的示例进行连接的文档
4条答案
按热度按时间6psbrbz91#
在用户模型中添加下一个代码:
在语言模型中添加下一个代码:
通过这种方式,您可以在用户和语言之间定义简单的一对多关系,但这还不足以让您的用户同时支持这两种语言。你需要做两个用户表和语言表的连接。这就是它的样子(如果您使用控制器):
或者,如果您使用userrepository类(最好是):
所以主要的技巧是用英语条件连接语言表来过滤用户,即支持英语的用户再连接语言表,但在“on”部分用法语来过滤支持法语的用户。
cx6n0qe32#
也许我没有正确理解这个问题,请纠正我,如果我错了,但如果你需要用户(s)说两种语言,你有一个错误的sql逻辑,而不是在条令。你应该这样做:
如果您的查询正确,我可以为它编写dql解释。
rn0zuynd3#
你可以:
与你想要的语言内在连接
使用聚合函数计算联接结果(联接语言)
按用户实体分组
过滤count(lang)=2的结果
代码:
它的工作原理是只在用户内部连接英语或法语的行,然后使用mysql检查每个用户是否有2行。
如果还希望将语言实体添加到结果中,则不能将其添加到querybuilder结果中,因为分组依据:
->addselect('a')
你必须再做一次查询。
tag5nh1u4#
通过分析db表,我假设您的实体是这样的
//用户.php
//语言.php
如果您有相同的设置(与上面的实体相同),那么您可以在userrepository.php中这样编写查询
这将返回一组结果。