怎么在Laravel項(xiàng)目共用migrations-創(chuàng)新互聯(lián)

今天就跟大家聊聊有關(guān)怎么在Laravel項(xiàng)目共用migrations,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

成都創(chuàng)新互聯(lián)于2013年創(chuàng)立,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元萬(wàn)源做網(wǎng)站,已為上家服務(wù),為萬(wàn)源各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575

在各項(xiàng)目里建各自 migration


我們先在 web/API 和 admin 里都建各自的 migration:

## web 目錄

php artisan make:migration foo
# Created Migration: 2018_09_19_144940_foo

php artisan migrate
# Migration table created successfully.
# Migrating: 2018_09_19_144940_foo
# Migrated: 2018_09_19_144940_foo

php artisan migrate:status
# +------+-----------------------+-------+
# | Ran? | Migration    | Batch |
# +------+-----------------------+-------+
# | Yes | 2018_09_19_144940_foo | 1  |
# +------+-----------------------+-------+

## admin 目錄

php artisan make:migration bar
# Created Migration: 2018_09_19_145255_bar

php artisan migrate
# Migrating: 2018_09_19_145255_bar
# Migrated: 2018_09_19_145255_bar

php artisan migrate:status
# +------+-----------------------+-------+
# | Ran? | Migration    | Batch |
# +------+-----------------------+-------+
# | Yes | 2018_09_19_144940_foo | 1  |
# +------+-----------------------+-------+
# | Yes | 2018_09_19_145255_bar | 2  |
# +------+-----------------------+-------+

從 artisan migrate:status 的結(jié)果來(lái)看,兩個(gè) migration 都正常執(zhí)行了,接下來(lái)我們?cè)囈幌禄貪L操作。

先直接在 web 目錄執(zhí)行

php artisan migrate:rollback
# Migration not found: 2018_09_19_145255_bar

報(bào)錯(cuò)了,因?yàn)樵?web 項(xiàng)目里找不到 bar 這個(gè) migration 文件;那如果我們剛剛是直接在 admin 目錄執(zhí)行,是能夠正?;貪L的,但是如果我們指定回滾兩個(gè)版本:

php artisan migrate:rollback --step=2

# Migration not found: 2018_09_19_144940_foo
# Rolling back: 2018_09_19_145255_bar
# Rolled back: 2018_09_19_145255_bar

這次回滾操作也是有問(wèn)題的,只回滾了一半。

所以我們應(yīng)該按照 migrate 的相反順序執(zhí)行回滾,即先在 admin 執(zhí)行一次,然后再到 web 里再執(zhí)行一次。我們上面的實(shí)驗(yàn)很簡(jiǎn)單,要記住這些順序也不難,可是在實(shí)際的項(xiàng)目中,你的 migrations 就比這個(gè)復(fù)雜多了,而且只通過(guò) migrate:status 你也看不出來(lái)執(zhí)行順序到底是怎么樣的,所以在各個(gè)項(xiàng)目里各自維護(hù)各自的 migrations 似乎行不通...

共用一份 migration


上面的實(shí)驗(yàn)我們可以知道,我們?cè)趫?zhí)行 artisan migrate 的時(shí)候,Laravel 會(huì)讀取 migrations 目錄里的文件和數(shù)據(jù)庫(kù)里的記錄,然后再執(zhí)行相應(yīng)的操作(并記錄這次操作);回滾的時(shí)候 Laravel 會(huì)讀取數(shù)據(jù)庫(kù)中的記錄,然后執(zhí)行 migrations 目錄里相應(yīng)的文件中的 down 方法。

而當(dāng) migrations 分散在不同的項(xiàng)目(目錄)里的時(shí)候,不管你在哪個(gè)項(xiàng)目中執(zhí)行migrate:rollback時(shí),都可能只有一部分 migration 文件被加載進(jìn)來(lái),因此會(huì)造成一些奇奇怪怪的問(wèn)題。

那我們可以將所有 migrations 放在同一個(gè)地方,怎么操作呢?再建一個(gè)新的項(xiàng)目似乎有點(diǎn)麻煩了...我們先看看幫助吧:

php artisan migrate --help

Description:
 Run the database migrations

Usage:
 migrate [options]

Options:
  --database[=DATABASE] The database connection to use
  --force    Force the operation to run when in production
  --path[=PATH]   The path to the migrations files to be executed
  --realpath    Indicate any provided migration file paths are pre-resolved absolute paths
  --pretend    Dump the SQL queries that would be run
  --seed     Indicates if the seed task should be re-run
  --step     Force the migrations to be run so they can be rolled back individually
 -h, --help     Display this help message
 -q, --quiet    Do not output any message
 -V, --version    Display this application version
  --ansi     Force ANSI output
  --no-ansi    Disable ANSI output
 -n, --no-interaction  Do not ask any interactive question
  --env[=ENV]   The environment the command should run under
 -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

果然有我們想要的東西:--path 和 --realpath,先來(lái)看看這兩個(gè)參數(shù)是什么用途:

--path[=PATH]  指定 migrations 文件的路徑
--realpath     表示 --path 指定的路徑為絕對(duì)路徑


那我們?cè)谶M(jìn)行 migrations 操作的時(shí)候,指定同一個(gè)路徑,那就可以共用 migrations 了:

php artisan make:migration foo --path="../admin/database/migrations"

# or

php artisan make:migration foo --path="/the/absolute_path/to/admin/database/migrations" --realpath


# migrate
php artisan migrate --path="../admin/database/migrations"

# migrate:rollback
php artisan migrate:rollback --path="../admin/database/migrations"

注:當(dāng)你不帶 --realpath 的時(shí)候,path 是以項(xiàng)目的根目錄為 / 的

總結(jié)


所以,當(dāng)我們需要在多個(gè) Laravel 項(xiàng)目中共用 migrations 的時(shí)候,好的做法是通過(guò) --path 指定 migrations 文件的目錄,這個(gè)目錄可以是一個(gè)獨(dú)立的 git repo,也可以是其中一個(gè) Laravel 項(xiàng)目(我個(gè)人推薦放在其中一個(gè)項(xiàng)目中,采用獨(dú)立的 git 分支),這樣既可以共用 migrations,在團(tuán)隊(duì)協(xié)作的時(shí)候也不會(huì)混亂和出現(xiàn)沖突

看完上述內(nèi)容,你們對(duì)怎么在Laravel項(xiàng)目共用migrations有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

本文名稱(chēng):怎么在Laravel項(xiàng)目共用migrations-創(chuàng)新互聯(lián)
當(dāng)前URL:http://bm7419.com/article42/hcsec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站網(wǎng)站制作、Google、微信公眾號(hào)、自適應(yīng)網(wǎng)站、網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)