Mysql 需要帮助使用多对多关系上的连接和位置构建sql查询吗
我有两个通过多对多关系关联的对象。这两个对象是Mysql 需要帮助使用多对多关系上的连接和位置构建sql查询吗,mysql,sql,symfony,Mysql,Sql,Symfony,我有两个通过多对多关系关联的对象。这两个对象是Video和Category。视频可以有许多类别,反之亦然。我想做的是,如果我有一个类别,检索所有有这个类别的视频。另外,我有一个Section对象,它与视频有一个oneToMany关系,即一个Section包含许多视频。我现在想做的是: public function findAllBySectionAndCategory($section, $category) { $query = $this->getEntityManager(
Video
和Category
。视频可以有许多类别,反之亦然。我想做的是,如果我有一个类别,检索所有有这个类别的视频。另外,我有一个Section对象,它与视频有一个oneToMany关系,即一个Section包含许多视频。我现在想做的是:
public function findAllBySectionAndCategory($section, $category) {
$query = $this->getEntityManager()
->createQuery(
'SELECT v FROM OSCMySportBundle:Video v WHERE v.section = :section AND :category IN v.categories'
)
->setParameter('section', $section)
->setParameter('category', $category);
return $query->getResult();
}
'SELECT v FROM (SELECT a FROM OSCMySportBundle:Video a WHERE a.section = :section) JOIN v.categories category WHERE category.id = :category '
当我尝试测试此查询时,出现以下错误:
[Syntax Error] line 0, col 83: Error: Expected Doctrine\ORM\Query\Lexer::T_OPEN_PARENTHESIS, got 'v'
[Semantical Error] line 0, col 14 near '(SELECT a FROM': Error: Class '(' is not defined.
这可能意味着它正在寻找一个数组,但它找到了一个v。我知道这可能是个简单的问题,但我想不出来
编辑1:
我可以通过以下方式对其进行修改,以便进行连接:
'SELECT v FROM OSCMySportBundle:Video v JOIN v.categories category WHERE category.id = :category '
但是,我还需要根据该部分查询视频,因此我执行了以下操作:
public function findAllBySectionAndCategory($section, $category) {
$query = $this->getEntityManager()
->createQuery(
'SELECT v FROM OSCMySportBundle:Video v WHERE v.section = :section AND :category IN v.categories'
)
->setParameter('section', $section)
->setParameter('category', $category);
return $query->getResult();
}
'SELECT v FROM (SELECT a FROM OSCMySportBundle:Video a WHERE a.section = :section) JOIN v.categories category WHERE category.id = :category '
但出现以下错误:
[Syntax Error] line 0, col 83: Error: Expected Doctrine\ORM\Query\Lexer::T_OPEN_PARENTHESIS, got 'v'
[Semantical Error] line 0, col 14 near '(SELECT a FROM': Error: Class '(' is not defined.
看起来我无法进行子查询。函数中的条令
要求在语句中的之后使用(1,2,3,4,…)
格式。不幸的是,这并不意味着列条件可以证明成员身份
但是,我相信您正在寻找
条令功能的成员:
public function findAllBySectionAndCategory($section, $category) {
$query = $this->getEntityManager()
->createQuery(
'SELECT v FROM OSCMySportBundle:Video v WHERE v.section = :section AND :category MEMBER OF v.categories'
)
->setParameter('section', $section)
->setParameter('category', $category);
return $query->getResult();
}
您可以使用此功能将有效的条令对象或标识符传递到$category
这方面的示例隐藏在:
这里的答案有用吗?这有点帮助,谢谢你!然而,我无法回答问题的全部部分。