快速入门

需求

假如我们要开发一个商品模块,我们将它命名为 ItemBundle ,其包含了商品、sku、商品类型、标签,可以实现商品相关的增删改查。

环境说明

本文档是用的开发环境是官方的 docker 环境,点此查看,其他环境使用命令时请按需修改。

本文档所使用的 php artisan 命令,都需要进入容器内执行,进入容器的命令为:

docker exec -it ecshopx-dev-docker_espier-bloated-web_1 sh

开发说明

在使用 Doctrine Orm 开发应用程序时,可以使用以下三种方式来启动开发:

  • Code First:首先要开发 Entity 类,然后将他们映射到数据库中

  • Model First:需要是用工具对(UML)进行建模,并从改模型生成数据库和 Entity 类

  • Database First:首先要设计数据表,然后根据数据表生成 Entity 类

Code First

此方式需要根据需求设计 Entity 类,设计时需要熟知 Doctrine Orm 注解,只要熟悉数据库设计即可,所以用这种方式效率更高。此方式具体开发流程如下:

  • 一、设计 Entity 类

  • 二、通过命令生成数据库迁移

    php artisan doctrine:migrations:diff
  • 三、生成数据表

    php artisan doctrine:migrations:migrate

Ecstore 和 Bbc 和此方式类似

Database First

此方式和 Database First 正好相反,先设计数据表,再生成 Entity 类。由于此方式不需要熟知 Doctrine Orm 注解,只要熟悉数据库设计即可,所以用这种方式效率更高。此方式具体开发流程如下:

  • 一、采用数据库设计软件设计数据库 ER 图。

  • 二、通过 ER 图生成的 SQL 创建数据表

  • 三、通过命令生成实体

--filter=DemoUser 中的 DemoUser 是想要生成的实体名,是数据表的大驼峰写法,不写 --filter 将会把数据库中所有的数据表都生成 Entity 放到 src/ItemBundle/Entities 目录中

本教程将采用 Database First 的方式。

设计数据库

根据需求,我们通过 Mysql Workbench 来设计 ER 图:

设计完 ER 图之后,在 Mysql Workbench 中可以通过 Database-> Forward Engineer 直接将 ER 图直接生成数据表。 为了方便讲解,我们将此 ER 图生成的 SQL 放在此处,方便大家直接创建数据库:

生成实体类

我们可以通过命令行生成 Entity 类

生成 Entity 成功后可以看到以下输出:

以 ItemType 实体为例,打开 ItemType.php 可以看到以下内容:

生成实体类的 Getter 和 Setter

根据数据表生成的实体类,只有 private 的属性,我们还需要为其设置 Getter 和 Setter 方法,可以以下命令生成:

定义接口

一个接口对一个一条路由,一个路由对应一个控制器方法。

定义控制器

我们先来完成 ItemType 实体的增删改查操作。

先创建一个带有增删改查空方法的控制器:

定义路由

此时,可以通过浏览器访问 http://127.0.0.1:8080/api/item_types 获取商品类型列表接口。

定义接口文档

一、定义 ItemBundle 接口文档分组

基本信息:

接口标签

接口统一错误响应结构体:

二、定义具体接口的输入和输出

三、接口文档

接口文档的生成请参阅 [接口文档生成和接口测试]

成功之后,将会看到以下界面:

实现商品类型的 CRUD

我们以 MVC 架构为基础,加入 Repository 模式Service 模式来完成我们的开发。

第一步:新增相关类

新建与 ItemType 相关的 Service 和 Repository 类。

新建 ItemTypeSecvice 类:

新建 ItemTypeRepository 类:

同时修改 ItemType 类与之相关联:

第二步:确定调用关系

采用 Service 和 Repository 模式,相关类的调用关系为 Controller->Service->Repository 。

我们利用 Laravel 自带的依赖注入的方式,在 Controller 中新增构造方法来初始化 Service 类

因为初始化 Repository 类需要特定的方法,所以在 ItemTypeSecvice 类中,我们需要手动初始化 Repository 类:

第三步:编写逻辑

ItemTypeRepository 类

ItemTypeSercice 类:

控制器

未完待续

Last updated

Was this helpful?