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

这方面的示例隐藏在:


这里的答案有用吗?这有点帮助,谢谢你!然而,我无法回答问题的全部部分。