mysql - 需要帮助构建带有 join 和 where 的多对多关系的 sql 查询

标签 mysql sql symfony

我有两个通过多对多关系相关的对象。这两个对象是VideoCategory。一个视频可以有多个类别,反之亦然。我想做的是,如果我有一个类别,则检索具有该类别的所有视频。另外,我有一个与视频具有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();
}

当我尝试测试此查询时,出现以下错误:

[Syntax Error] line 0, col 83: Error: Expected Doctrine\ORM\Query\Lexer::T_OPEN_PARENTHESIS, got 'v'

这可能意味着它正在寻找一个数组,但找到了一个 v。我知道这可能是一个简单的问题,但我无法弄清楚。

编辑1:

我可以通过以下方式修改它,以便我可以进行 JOIN:

'SELECT v FROM OSCMySportBundle:Video v JOIN v.categories category WHERE category.id = :category '

但是,我还需要根据部分查询视频,因此我执行了以下操作:

'SELECT v FROM (SELECT a FROM OSCMySportBundle:Video a WHERE a.section = :section) JOIN v.categories category WHERE category.id = :category '

但出现以下错误:

[Semantical Error] line 0, col 14 near '(SELECT a FROM': Error: Class '(' is not defined.

看起来我无法进行子查询?

最佳答案

Doctrine IN 函数需要在 IN 语句之后采用 (1, 2, 3, 4, ...) 格式。不幸的是,它并不意味着列条件可以证明成员资格。

但是,我相信您正在寻找 MEMBER OF Doctrine 函数:

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();
}

您可以使用此功能将有效的 Doctrine 对象或标识符传递到 $category 中。

此示例隐藏在 Doctrine docs 深处:

$query = $em->createQuery('SELECT u.id FROM CmsUser u WHERE :groupId MEMBER OF u.groups');
$query->setParameter('groupId', $group);
$ids = $query->getResult();

关于mysql - 需要帮助构建带有 join 和 where 的多对多关系的 sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26962918/

相关文章:

php - 用 OR 条件绑定(bind)参数 Mysql

sql - 如何在 setvar 变量 SQL 中动态设置值

php - 如果 Symfony2 中的帐户不完整,则首次登录后重定向到配置文件编辑页面

php - 设计模式 Doctrine ORM - 根据输入生成唯一名称

php - Symfony2 中多个文件上传的问题

mysql 有条件更新

mysql - 一对一关系还是使用同一张表?

mysql - SQL COUNT 使用 GROUP_CONCAT 返回错误值

ios - 书籍结构(目录)和内容的数据库设计

mysql - 无法在 Mariadb 中删除外键