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。


<<:  【没钱买ps,PyQt自己写】Day 1 - 安装 PyQt,建立自己的第一支 PyQt5 程序

>>:  软件开发犹如一场接力赛

Day6 输入框介绍

看完上一篇的输入,今天来介绍不一样表单元件 Input text Textarea多行文字 Chec...

[Day 6] Button

Day 5 进到了网站中最常见需要做功能性的环节 Button <Button variant...

[备忘录] 我的DVD备份SOP

家里有很多以前买的DVD电影 居住环境比较潮湿,光碟的表面竟然有一些发霉。 於是开始着手测试了一些拷...

[早餐吃到饱-4] 成旅晶赞饭店 - 台中民权馆 #早午餐Buffet

早安呦~ 成旅的老顾客,许多都是退休人士,其中不乏金字塔顶尖的消费族群。依他们的经济能力,是可以选择...

阴影(下)

大家好,我是西瓜,你现在看到的是 2021 iThome 铁人赛『如何在网页中绘制 3D 场景?从 ...