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

php中文网
发布: 2016-06-06 20:06:21
原创
1149人浏览过

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

bee餐饮点餐外卖小程序
bee餐饮点餐外卖小程序

bee餐饮点餐外卖小程序是针对餐饮行业推出的一套完整的餐饮解决方案,实现了用户在线点餐下单、外卖、叫号排队、支付、配送等功能,完美的使餐饮行业更高效便捷!功能演示:1、桌号管理登录后台,左侧菜单 “桌号管理”,添加并管理你的桌号信息,添加以后在列表你将可以看到 ID 和 密钥,这两个数据用来生成桌子的二维码2、生成桌子二维码例如上面的ID为 308,密钥为 d3PiIY,那么现在去左侧菜单微信设置

bee餐饮点餐外卖小程序 1
查看详情 bee餐饮点餐外卖小程序

我使用的是 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>
登录后复制

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

<code>

$query = $em
    ->createQuery(
        'SELECT ga FROM AppBundle:GoodsAndAttribute ga
    WHERE ga.id = 1');
    </code>
登录后复制

使用 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>
登录后复制

回复内容:

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

我使用的是 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>
登录后复制

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

<code>

$query = $em
    ->createQuery(
        'SELECT ga FROM AppBundle:GoodsAndAttribute ga
    WHERE ga.id = 1');
    </code>
登录后复制

使用 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>
登录后复制
相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号