Symfony 2从与学说的多对多关系中获取数据

时间:2012-04-24 09:53:49

标签: symfony doctrine many-to-many dql

我坚持让它与Symfony2和Doctrine一起工作,情况如下: 带有穿孔信息的页面(一般信息和护理信息)。

护理服务可以有多次穿孔,穿刺可以有多次护理

数据库布局:

Piercings:
    id
    name
    ...

Caretaking:
    id
    title
    description

piercing_to_caretaking
    id
    piercing_id
    caretaking_id

现在,我将如何创建实体和相应的Query / Dql?

1 个答案:

答案 0 :(得分:3)

如果使用yml定义实体:

在Piercing.orm.yml中添加:

manyToMany:
    caretakings:
        targetEntity: Caretaking
        inversedBy: piercings
        joinTable:
            name: piercing_caretaking
            joinColumns:
                caretaking:
                    referencedColumnName: id
            inverseJoinColumns:
                piercing:
                    referencedColumnName: id

在Caretaking.orm.yml中添加:

manyToMany:
    piercings:
      targetEntity: Piercing
      mappedBy: caretakings

以通常的方式生成/更新实体,即:

app/console doctrine:schema:update --dump-sql (to check results)
app/console doctrine:schema:update --force (to apply changes)

然后,如果您有穿孔或看护实体,您可以访问相关实体,如下所示:

$piercing->addCaretaking($caretaking); 
$caretakings = $piercing->getCaretakings();
...
$piercings = $caretaking->getPiercings();

有关更多信息,包括如何使用注释执行此操作,请参阅Doctrine文档的Section 5 Association Mapping中的5.1.4多对多,双向子部分。