iT邦幫忙

2021 iThome 鐵人賽

DAY 16
0
Modern Web

每日1%,你會累趴。系列 第 16

Day16 Laravel - migrate

Docker及Laravel為以後每個專案都會用到的搭配,所以這種時候就將它做成一個類似模板的環境並將他上傳到Github,如果以後有新專案要做的話直接clone下來就可以了,記得使用composer install、新增.env檔,利用指令啟動。

docker-compose up -d

Docker啟動後的資料夾分佈會長這樣

.
├── backend
│   ├── laravel
│   │   ├── README.md
│   │   ├── app
│   │   ├── artisan
│   │   ├── bootstrap
│   │   ├── composer.json
│   │   ├── composer.lock
│   │   ├── config
│   │   ├── database
│   │   ├── package.json
│   │   ├── phpunit.xml
│   │   ├── public
│   │   ├── resources
│   │   ├── routes
│   │   ├── server.php
│   │   ├── storage
│   │   ├── tests
│   │   ├── vendor
│   │   └── webpack.mix.js
│   ├── nginx
│   │   └── default.conf
│   └── postgresql
│       ├── PG_VERSION
│       ├── base
│       ├── global
│       ├── pg_commit_ts
│       ├── pg_dynshmem
│       ├── pg_hba.conf
│       ├── pg_ident.conf
│       ├── pg_logical
│       ├── pg_multixact
│       ├── pg_notify
│       ├── pg_replslot
│       ├── pg_serial
│       ├── pg_snapshots
│       ├── pg_stat
│       ├── pg_stat_tmp
│       ├── pg_subtrans
│       ├── pg_tblspc
│       ├── pg_twophase
│       ├── pg_wal
│       ├── pg_xact
│       ├── postgresql.auto.conf
│       ├── postgresql.conf
│       ├── postmaster.opts
│       └── postmaster.pid
└── docker-compose.yaml

nginx的default.conf內容有變更要注意,root會指向laravel的public資料夾

server {
    listen 80;
    index index.php index.html;
    server_name localhost;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/laravel/public;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

docker-compose裡的nginx與php掛載資料夾也要注意有變更

version: '3'
networks: 
  laravel:
services: 
  nginx:
    image: nginx:stable-alpine
    container_name: nginx
    ports:
      - "8080:80"
    volumes:
      - ./backend/laravel:/var/www/laravel
      - ./backend/nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php
      - postgresql
    networks:
      - laravel
  php:
    image: kurt6783/iron_man
    container_name: php
    working_dir: /var/www/laravel
    ports:
      - "9000:9000"
    volumes:
      - ./backend/laravel:/var/www/laravel
    networks:
      - laravel
  postgresql:
    image: mdillon/postgis:10
    container_name: postgresql
    tty: true
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_PASSWORD=1234
    volumes:
      - ./backend/postgresql:/var/lib/postgresql/data
    networks: 
      - laravel

這樣完整的專案環境就算建置好了,總算要進入今天的正題,Laravel - migration。


先移動至laravel資料夾,之後的操作幾乎都是在這層操作

cd backend/laravel

可以看到有database/migrations這個資料夾,裡面會有四個已經建立好的檔案,接著試試看下指令

php artisan migrate

接著就會看到系統以迅雷不及掩耳的速度把table都建立好了,可以用Navicate來檢查一下
https://ithelp.ithome.com.tw/upload/images/20210916/20115048EqAG9H1llF.png

可以看到每個migration裡面都有up&down,up內的事情會在migrate時執行,down內的事情會在rollback時執行

php artisan migrate:rollback

migration是一層一層疊上去的,疊的順序可以migrations這個table裡面的batch來得知,當使用rollback指令時會將最上方的一層資料移除掉,如果想要將全部的table都移除,可以使用reset

php artisan migrate:reset

但是要特別注意,使用rollback或是reset時,table裡的資料會被移除而且無法救回,這兩個指令要小心使用。

還有一個比較特別的指令:seed,先打開database/seeders/DatabaseSeeder.php這個檔案,會看到有一行code被註解掉了,將此註解打開

\App\Models\User::factory(10)->create();

如果在使用migrate時搭配指令就會依照需求創建基本資料

php artisan migrate --seed

創建資料的格式會在database/factories,與其model對應的factory裡被定義。

Migration的操作差不多就這幾項,謝謝觀看的各位,請記得按讚分享開啟小鈴鐺,你的支持會讓按讚數+1。


上一篇
Day15 Composer & Laravel - install
下一篇
Day17 Laravel - artisan
系列文
每日1%,你會累趴。30

尚未有邦友留言

立即登入留言