快速入门
需求
假如我们要开发一个商品模块,我们将它命名为 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?