06. DB x tinker x seeder

连线设定其实也没什麽好介绍的,改 env 这种事 sail 已经弄好了。
即便现在,用 composer create-project 还是有些步骤会忘记,我还写过一篇笔记提醒自己 clone 别人的专案下来要下哪些指令。

总之我们只需要跑 sail artisan migrate 就可以了。跑完可以看看目前资料表的状态 sail artisan migrate:status

填充资料

跑完之後当然要来做点事情,但资料库空空的怎麽办?以下提供四种填充假资料的方法与使用情境:
1.DB CLI => 金牛座的你作风老派稳固,使用的是最熟悉的 db command 与 SQL 指令。
2.Tinker => 处女座的你行动力强,使用 Tinker 快速完成填充资料的目的。
3.Seeder => 摩羯座的你讨厌重复,使用 Seeder 写完一次就能一劳永逸。
4.DB GUI => 适合巨蟹座的你,图象化的资料库管理面版让你有回到家的感觉。

星座跟形容词都是我乱掰的,徵求星座专家帮我改改。

1.DB CLI

Laravel 8 artisan 提供了 db ,可以直接打 sail artisan db 进入 db。我是使用 mysql 资料库,所以使用 mysql command。

show databases;

显示资料库

show tables;

显示资料表

INSERT INTO users (name, email, password)
VALUES ('jt', '[email protected]', 'password');

插入一笔资料

2.Tinker

Tinker 是 artisan 提供的 REPL,让你用 Eloquent ORM 方式与资料库互动。

$user = App\Models\User::create(['name'=>'jt','email'=>'[email protected]','password'=>Hash::make('5566123')]);

插入一笔资料

3.Seeder

sail artisan seed

没事发生,因为我们要去把注解打开。

database/seeders 里面预设有个 DatabaseSeeder.php

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
         \App\Models\User::factory(10)->create();
    }
}

移除注解再来一次 sail artisan seed 资料库就多了十笔资料。
而这些假资料的内容是定义在 database\factories\UserFactory.php

Model Factories

刚刚介绍的方法是 Model Factory。
Laravel 8 的 factory 变成一个类别,预设加入 model,打开 User Model 可以看到里面有个 HasFactory。

这是我们刚刚 seed 填充十个定义在 factory 的资料的写法:

User::factory(10)->create();

这是之前的写法:

factory(User::class, 50)->create();

Call Method

call method 可以在定义跑 seed 的顺序,照理来说会写在 DatabaseSeeder.php 为整个专案定义 seed 顺序。

public function run()
{
    $this->call([
        \Database\Seeders\UserSeeder::class,
        \Database\Seeders\PostSeeder::class
    ]);

}

其他

  1. Seeder
    sail artisan seed 是跑 DatabaseSeeder.php,如果有单独执行某个 seed 的需要也可以为个别 class 写 seed。
sail artisan db:seed --class=PostSeeder

详见手册拉
https://laravel.com/docs/8.x/seeding

  1. Factory

在 Factory 产假资料通常使用 faker 或 Laravel 的 Str helper。

Factory Class 在这次改版有不少变化,可以参考这篇
https://auth0.com/blog/whats-new-in-laravel-8/

DB GUI

我目前在 macOS 上使用的是 TablePlus
现在不是很想截图


今天关心大家的健康,跟大家分享我的办公室小物:

眼睛

  1. USB 加热眼罩
  2. 防窥片、护眼萤幕
  3. 叶黄素
  4. 凉感眼药水、人工泪液

按摩热敷

  1. 网球,没事就要站起来去墙壁旁边滚一滚
  2. 电热敷毯

环境
以下环境一律劝离

  1. 昏暗、强光,例如工业风昏暗 mix 强光吊灯
  2. 不提供外接萤幕或外接萤幕很烂

其他

  1. 温开水
  2. 要运动(中午出门买便当不算)

<<:  Day06 - Parsing Ptt(补充)

>>:  Day06-条件判断与列表渲染

知名云服务供应商 Liquid Web 收购 WordPress 群众募资外挂 GiveWP

说起群众募资,有时是开始新产品、新服务或各种古怪的新奇事物。但也有典型的例如线上课程、解决某一件社...

[DAY 03]物品拍卖价格查询功能(1/4)

制作FF14 chatbot主要步骤如下: 功能需求 资料收集 资料前处理 chatbot功能能开发...

爬虫怎麽爬 从零开始的爬虫自学 DAY14 python条件运算式

前言 各位早安,书接上回我们练习了条件判断语法 if else elif 的用法,今天我们要来介绍它...

AE自动消除画面动态物件-Day27

今天来练习怎麽让动态的物件在影片中消除, 影片范例 但因为没有付钱买,有浮水印,所以不知道能不能去掉...

Day 7 - 基本语法2 (型态)

昨日的回家功课小问题 没错,你如果这样写就会直接报错。 原因其实很简单,就是常数无法运算,就像 &q...