by Devin Yang

建立于: 6年前 ( 更新: 6年前 )

本文将一步一步介绍相关的命令用例:
Model=>Factory=>Seeder=>DatabaseSeeder
一步一脚印,让我们就从Model开始检视所有流程到DatabaseSeeder。

您阅读本文前,您应该要了解Laravel中的 make:migration相关用途

一、 Model (模型)
透过简单的ActiveRecord轻松的对数据库进行修改,简单说,让我们以对象的方式进行数据的修改。
您可以由这里看到Active Record说明,这里引用RailsGuids的文章给大家参考。

那在Laravel中如何建Model呢? 记得请用单数,一个对象Model Object代表是单数,
例如$obj->title而不是$objs->title。
php artisan make:model Content

上方命令,创建了一个名为Content的model,这个Model默认对映到数据表中的 contents 数据表,
因为数据表内会有多笔数据,所以数据表是 contents 复数,非常符合逻辑,

当然,我们也可以自定义Mode所对映的Table名称,例如,我在Content.php这个Model中添加如下:
protected $table='content';

为何这样做,绝对不是因为我任性,也不是这样做比较x或是装逼,
是因为这是旧进程转Laravel,这个 content table 已存在很久,被我列为古迹了,动不得,
无法更名为contents。

所以Laravel的Model提供高度的自由,虽然有默认的规则,但是我们也可以依自己的状况及需求调整
诸如table名称,或是PK栏位(id)等,但是,如果您是新的项目,请勿任性自定义Table的名称或PK哦!
殊殊用法异常,这里不在多做说明。

二、Factory(工厂)
在Lravel的5.5后,可以对各别的Model,创建各别的工厂。
先来看看命令:
php artisan make:factory StudentSahreFactory

在上方的命令中,即可创建一个 StudentShareFactory.php 工厂,工厂通常用来建假数据。
上方命令,在这间工厂( StudentShareFactory )中,我定义(define)了一个 App\Student Model
并透过 Faker 生成假数据,存入栏位中(下图)。

在下方的Sample中可能较原来Laravel默认的复杂一点,但是基本运行一次就会创建一笔假数据到students的数据表中 ,
这里我有一个有趣的使用方式,我的 c_index 栏,需要依序新建,
也就是我创建一百笔数据时,c_index栏,要依序,由1加到100,所以我建了一个自定义的Class处理这件事情。
factory

有了Facetory后,我们可以在透过Tinker( php artisan tinker )提供的命令,轻松创建单笔或多笔的假数据了。
下图中(Tinker的交互模式),透过 factory ,我创建了 10 笔随机的假数据,到students数据表。
tinker

三、Seeder(播种者)
Seeder的用途,让我们可以不透过手动运行 tinker 来创建假数据。
如何建seeder,我想,大家或许猜到了,当然就是 make:seeder (生成:播种者)。
我想读到这里,您应该已经会 make:model make:factory 了,
并且使用 php artisan tinker 创建假数据。
php artisan make:seeder StudentShareSeeder

上方的命令中,我创建了一个 StudentSahreSeeder.php ,生成后,用我们的编辑器找到该档,
在下图run()的 methods 内,再补上刚我在Tinker中所用的建假数据的工厂命令,
例如这里,也就是当这个run()被运行时,就可以一口气创建300笔假数据。
seeder
我们可以用db:seed --class=命令,来运行指定的Seeder,
例如这里的StudentShareSeeder,即可生成300笔的假数据,
一个新的网站没假数据怎么套版呢,您说是吧。
php artisan db:seed --class=StudentShareSeeder

未指定--class时, php artisan db:seed ,默认他会调用DatabaseSeeder.php
注: seeder不止可以拿来生成假数据,也可以拿来生成一个Project最初所所需要的真数据。

四、DatabaseSeeder
要能快速的创建一个可运作的开发环境,当然不需要手动下那么多命令,应该就是用 db:seed 即可。
当不指定--class时,默认就会采用 DatabaseSeeder
在下图的DatabaseSeeder.php中,可以看见,我调用了一堆的Seeder。
DatabaseSeeder
所以一个可被重覆使用的Project,我会运行migration后,再运行db:seed
来生成后台所需的基本数据。

举例: 我套版的后台固定的新建修删功能及模块化的表单,因此不需搞个网站就重写一次新建修删,
当我要套版一个新的网站时,我只需git clone后台的Project下来。
再运行composer install,调整.env(网站域名,OAuth主机指定)及建数据库等动作,然后再运行php artisan migratephp artisan db:seed,搞定,我就能登录至后台设置所需的表单样式等功能,及生成假数据了,
然后依美工给我的静态页进行blade前台套版了,所以套版后台,可被重覆使用,
透过db:seed让我可以快速的创建起整个后台运作基本环境。
php artisan db:seed

在上方命令运行后,他会跑DatabaseSeeder,瞬间生成定义好,我开发时所需要的测试数据罗,
所以有了db:seed,拿来创建Project最初所需要的共用数据,不论自用还是他用都非常方便的。

在上图的例子中,我的OwBaseSeeder,跑的可不是factory,而是LaravelQuery Builder
来看看我这里的OwBaseSeeder.php怎么跑Insert基本的数据。
Query Builder

五、help(帮助)
再让我们回到Model, make:model 命令相当多好用的参数,这里以Laravel 5.5为例。
-a或是-m等。
我们对於Laravel的artisan命令有不了解,想了解更多时,都可以使用 help 这个 keyword 取得说明。
php artisan help make:model
help command
例如,在建Model的同时,顺便一起生成其他需要文件,例如: Factory、Controller及migration文件等。
底下,示意图:
随便测试的命令
 

Tags: laravel

Devin Yang

文章内容无法一一说明,如果您有什么不了解处,欢印提问哦:)

No Comment

Post your comment

需要登入才可留言!

类似文章


d-laravel,docker

D-Laravel v1.2.1版变更说明(建议更新,必免踩雷)

D-Laravel v1.2.1版修正说明 use GuzzleHttp\Client; 进行post时.出现访问被拒的问题。 如果您是由旧版升级,您可能需调整etc/default-ssl.conf的设置档 (如果有该档) 请调整php:9000变更为web:9000,你可以透过运行一次./console secure调整。 docker-compose设置档部份,PHP-FPM container变更为network_mode: "service:web"...

docker,laravel

[D-Laravel]./console node

进行Laravel开发时,有时我们会需要透过npm安装nodejs的包,但是偏偏我们系统中的Node又不够新。 或许因某些因素没法升级,例如要跑旧版的nodejs进程等。 其实我们可以透过简单的命令,用docker,让我们就能使用最新版本的node image来挂载host端的/sites数据夹罗。 这么一来我们就可以随时运行新版本的npm命令啦。

laravel,docker

如何自定义Laravel分页

最近闲了一点,想说来调整一下网站上下页的箭头,如果您还不太了解如何自定义Laravel的分页, 可以来看看三分钟简短的介绍,我如何自定义Laravel的分页。