mysql - 如何加入多对多关系

标签 mysql symfony doctrine-orm

实体:

  • 型号
  • 类别
  • 关键字

模型与关键字具有多对多关系,类别与关键字具有多对多关系。

orm生成以下表格

  • 型号
  • 类别
  • 关键字
  • keyword_model
  • keyword_category

给定一个类别后,如何获取与该类别相关的所有模型?我会这样做

  • 按category.id从keyword_category获取所有关键字id
  • 将结果与 keywords_model 表连接
  • 连接的结果应该是所有相关的模型 ID

由于 symfony2 处理实体而不是表,因此似乎很难创建 mysql 查询。我尝试过类似的东西

SELECT x,y FROM MyBundle:Category x, MyBundle:Model y
        JOIN x.keywords
        JOIN y.keywords
            WHERE
                x.id = " . $category . " 

但是这是无效的 mysql 语法。有什么想法如何在这里获取模型吗?

最佳答案

您可以尝试以下方法:

SELECT 
   y 
FROM 
    MyBundle:Model y
WHERE
    EXISTS (
        SELECT
            x
        FROM
            MyBundle:Category x
        JOIN
            x.keywords xk
        WHERE
            xk MEMBER OF y.keywords AND
            x = :category
    )

或者如果您的亲戚是bidirectional :

SELECT 
   y 
FROM 
    MyBundle:Model y
JOIN
    y.keywords yk
JOIN
    yk.categories c
WHERE
    c = :category

关于mysql - 如何加入多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20418257/

相关文章:

php - 获取 Doctrine 2 中的相关条目

doctrine-orm - 使用 Doctrine 的 DDD

mysql - 警告 [LocalManagedConnectionFactory :cleanup] Lock owned during cleanup:

mysql - 哪个更好,在 mysql 中使用多行、表或数组

MySQL Workbench EER 图更改表格颜色

php - symfony2以管理员用户身份访问私有(private)文件

Symfony2/学说 : load only subset of related entities

PHP Mysql 不删除行

ssl - Symfony2 : assets_base_url by protocol or header

symfony - TWIG - 如何在嵌入中覆盖 block ,但在子模板中?