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

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

WBOY
Lepaskan: 2016-06-06 20:06:21
asal
989 orang telah melayarinya

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

我使用的是 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>
Salin selepas log masuk
Salin selepas log masuk

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

<code>

$query = $em
    ->createQuery(
        'SELECT ga FROM AppBundle:GoodsAndAttribute ga
    WHERE ga.id = 1');
    </code>
Salin selepas log masuk
Salin selepas log masuk

使用 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>
Salin selepas log masuk
Salin selepas log masuk

回复内容:

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

我使用的是 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>
Salin selepas log masuk
Salin selepas log masuk

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

<code>

$query = $em
    ->createQuery(
        'SELECT ga FROM AppBundle:GoodsAndAttribute ga
    WHERE ga.id = 1');
    </code>
Salin selepas log masuk
Salin selepas log masuk

使用 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>
Salin selepas log masuk
Salin selepas log masuk
Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan