TP5实践小总结(1)

TP5的关联应用

参考TP5的多对多关联文档,给大家简单介绍一下我在项目应用中的实现。

  • ER图讲解多对多关系

如图绘出“订单——票据”联系,记为“O-T”联系;图中Order实体和Ticket各画了5个属性作为展示,业务需要不同属性也一定不一致,这点大家可根据业务场景自行设计;其中Ticket实体大家可联系成商品,就好比我们购物下单时,一笔订单可包含各种各样的商品,这里我的订单中所有的商品都是票据,一笔订单包含多张票据。

  • 数据表

根据绘制的ER图我们可以确定,订单-票据的数据表实现需要三张表,订单表Orders(Order是数据库关键字因此不能作为表名),票据表Ticket,中间表Oticket。在我的项目中订单表Orders和票据表Ticket属性较为复杂,在此不一一列举说明,关系表Oticket中用我用oid记录订单id,tid记录票据id。

  • 模型定义

对照文档中的belongsToMany方法

来给Orders模型和Ticket模型定义关联


中间表名都是Oticket,大家需要注意一下外键和当前模型关联键名的位置不要写错


模型要和表名一致,建议大家使用自动生成目录的方法,在build.php中定义好所有的控制器、模型、验证器等,注意大小写,在此先不详细介绍了,可参见链接描述。

  • 控制器调用查询

在控制器中写一个接口,查询出符合查询条件的结果集,定义为$res,我的需求是列表查询,订单列表中就需要显示每笔订单下票据的详细信息,因此需要将每笔订单中的每张票据信息封装在ticketInfo中。

调用的列表接口结果集返回实例参见接口文档 链接描述

        {
            "id": 22,
            "orderNumber": "2018011857511014",
            "cid": 1,
            "state": 0,
            "message": " ",
            "fakeAmount": 20000,
            "realAmount": 19800,
            "price": 200,
            "discount": 0,
            "profit": 0,
            "isShare": 0,
            "payTime": 1516248345,
            "deadline": 1516248945,
            "sendTime": 0,
            "sentTime": 0,
            "finishTime": 0,
            "cancelTime": 0,
            "closeTime": 0,
            "create_time": 1516248345,
            "isDelete": 0,
            "deleteTime": 0,
            "company": "杭州柯基有限公司",
            "ticketSum": 2,
            "ticketInfo": [
                {
                "tid": 4,
                "aid": 8,
                "acceptBank": "三农",
                "ticketState": 0,
                "ticketNumber": "12423412",
                "image": "uploads/20180115/a301db72444edd285650bf655d26ac70.jpg",
                "fakeAmount": 234234,
                "price": 123,
                "discounts": 0,
                "adjustDay": 0,
                "ticketTime": 1514876755,
                "endTime": 1517388228,
                "restTime": 11
                },
                {
                "tid": 5,
                "aid": 8,
                "acceptBank": "三农",
                "ticketState": 0,
                "ticketNumber": "324534234",
                "image": "uploads/20180115/b6894f7048b361dc905b414b5fe2d705.jpg",
                "fakeAmount": 23412431,
                "price": 2314,
                "discounts": 0,
                "adjustDay": 0,
                "ticketTime": 1514882243,
                "endTime": 1517388228,
                "restTime": 11
                }
            ]
        }
        

以上就是我在项目实践中对多对多关联的一些应用,主要还是对照开发文档实践链接描述,只是文档中只介绍了单个查询的方法,我展示的是在应用中遇到的我使用结果集关联查询的方法,若是单笔订单查询,就不需要用到循环。

你可能感兴趣的:(php,thinkphp5)