iT邦幫忙

2021 iThome 鐵人賽

DAY 6
0
Modern Web

每天一篇文章系列 第 6

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', 'jt@laravel.com', 'password');

插入一筆資料

2.Tinker

Tinker 是 artisan 提供的 REPL,讓你用 Eloquent ORM 方式與資料庫互動。

$user = App\Models\User::create(['name'=>'jt','email'=>'jt@laravel.com','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. 要運動(中午出門買便當不算)

上一篇
05. Feature Test x HTTP Test x API Test
下一篇
07. DB x Factory x Test
系列文
每天一篇文章30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言