Home > Backend Development > PHP Tutorial > 使用 doctrine orm 如何在程序逻辑上实现在一张表完成两个外键的设置(或则说一个实体完成两个多对一的关系)?

使用 doctrine orm 如何在程序逻辑上实现在一张表完成两个外键的设置(或则说一个实体完成两个多对一的关系)?

WBOY
Release: 2016-06-06 20:06:21
Original
990 people have browsed it

这是之前开的一个问题的后续,参考链接

我使用的是 symfony2donctrine,里面关于数据库的操作,全部用的实体,官方推荐建立表与表之间的关系,我做了一些更改后,发现一个实体无法设置两个多对一的关系,下面是问题的描述与再现:

鉴于上一问题大家不推荐使用物理外健,我做了一些程序方面的处理:

  1. 删除数据表物理外健;

  2. 在程序中设置相应的实体关系;

简单的ER图更新:
使用 doctrine orm 如何在程序逻辑上实现在一张表完成两个外键的设置(或则说一个实体完成两个多对一的关系)?

商品属性关联表goods_and_attribute相对于商品表goods以及attributes是多对一的关系啊,所以我在实体文件中添加以下程序:

<code>#src/AppBundle/Resources/config/doctrine/GoodsAndAttribute.orm.yml
AppBundle\Entity\GoodsAndAttribute:
    type: entity
    table: goods_and_attribute
    id:
        ...
    fields:
        ...
    manyToOne:
        goods:
            targetEntity: Goods
            inversedBy: goodsAndAttribute
            joinColumn:
                name: goods_id
                referencedColumnName: id
    manyToOne:
        attribute:
            targetEntity: Attributes
            inversedBy: goodsAndAttribute
            joinColum:
                name: attribute_id
                referencedColumnName: id
    lifecycleCallbacks: {  }
</code>
Copy after login
Copy after login

在查询数据表的时候我发现只能得到其中一个关系的信息:

<code>

$query = $em
    ->createQuery(
        'SELECT ga FROM AppBundle:GoodsAndAttribute ga
    WHERE ga.id = 1');
    </code>
Copy after login
Copy after login

使用 doctrine orm 如何在程序逻辑上实现在一张表完成两个外键的设置(或则说一个实体完成两个多对一的关系)?

orm中如何关联多个表,实现相应信息的查询?例如

<code>$query = $em
        ->createQuery(
            'SELECT ga, g, a FROM ApplicationSonataMallBundle:GoodsAndAttribute ga
            JOIN ga.goods g 
            JOIN ga.attribute a 
        WHERE ga.id = 1');
</code>
Copy after login
Copy after login

回复内容:

这是之前开的一个问题的后续,参考链接

我使用的是 symfony2donctrine,里面关于数据库的操作,全部用的实体,官方推荐建立表与表之间的关系,我做了一些更改后,发现一个实体无法设置两个多对一的关系,下面是问题的描述与再现:

鉴于上一问题大家不推荐使用物理外健,我做了一些程序方面的处理:

  1. 删除数据表物理外健;

  2. 在程序中设置相应的实体关系;

简单的ER图更新:
使用 doctrine orm 如何在程序逻辑上实现在一张表完成两个外键的设置(或则说一个实体完成两个多对一的关系)?

商品属性关联表goods_and_attribute相对于商品表goods以及attributes是多对一的关系啊,所以我在实体文件中添加以下程序:

<code>#src/AppBundle/Resources/config/doctrine/GoodsAndAttribute.orm.yml
AppBundle\Entity\GoodsAndAttribute:
    type: entity
    table: goods_and_attribute
    id:
        ...
    fields:
        ...
    manyToOne:
        goods:
            targetEntity: Goods
            inversedBy: goodsAndAttribute
            joinColumn:
                name: goods_id
                referencedColumnName: id
    manyToOne:
        attribute:
            targetEntity: Attributes
            inversedBy: goodsAndAttribute
            joinColum:
                name: attribute_id
                referencedColumnName: id
    lifecycleCallbacks: {  }
</code>
Copy after login
Copy after login

在查询数据表的时候我发现只能得到其中一个关系的信息:

<code>

$query = $em
    ->createQuery(
        'SELECT ga FROM AppBundle:GoodsAndAttribute ga
    WHERE ga.id = 1');
    </code>
Copy after login
Copy after login

使用 doctrine orm 如何在程序逻辑上实现在一张表完成两个外键的设置(或则说一个实体完成两个多对一的关系)?

orm中如何关联多个表,实现相应信息的查询?例如

<code>$query = $em
        ->createQuery(
            'SELECT ga, g, a FROM ApplicationSonataMallBundle:GoodsAndAttribute ga
            JOIN ga.goods g 
            JOIN ga.attribute a 
        WHERE ga.id = 1');
</code>
Copy after login
Copy after login
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template