以下是【金聰采編】分享的內(nèi)容全文:
前言
在實(shí)際開發(fā)中,我們可能經(jīng)常會遇到一個項(xiàng)目會建立兩個 Laravel 項(xiàng)目,一個是面向用戶的 web/API,一個是管理員后臺,這兩個項(xiàng)目一般情況下是共用一個數(shù)據(jù)庫的,那么我們的 migration 可以共用嗎?該怎么操作?
Migration就相當(dāng)于數(shù)據(jù)庫的版本控制工具,可以使用
php artisan migration
生成數(shù)據(jù)庫表,但前提是要在database目錄下有相應(yīng)的表的PHP文件
下面話不多說了,來一起看看詳細(xì)的介紹吧
在各項(xiàng)目里建各自 migration
我們先在 web/API 和 admin 里都建各自的 migration:
## web 目錄php artisan make:migration foo# Created Migration: 2018_09_19_144940_foophp artisan migrate# Migration table created successfully.# Migrating: 2018_09_19_144940_foo# Migrated: 2018_09_19_144940_foophp 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_barphp artisan migrate# Migrating: 2018_09_19_145255_bar# Migrated: 2018_09_19_145255_barphp artisan migrate:status# +------+-----------------------+-------+# | Ran? | Migration | Batch |# +------+-----------------------+-------+# | Yes | 2018_09_19_144940_foo | 1 |# +------+-----------------------+-------+# | Yes | 2018_09_19_145255_bar | 2 |# +------+-----------------------+-------+
從 artisan migrate:status 的結(jié)果來看,兩個 migration 都正常執(zhí)行了,接下來我們試一下回滾操作。
先直接在 web 目錄執(zhí)行
php artisan migrate:rollback# Migration not found: 2018_09_19_145255_bar
報錯了,因?yàn)樵?web 項(xiàng)目里找不到 bar 這個 migration 文件;那如果我們剛剛是直接在 admin 目錄執(zhí)行,是能夠正?;貪L的,但是如果我們指定回滾兩個版本:
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
這次回滾操作也是有問題的,只回滾了一半。
所以我們應(yīng)該按照 migrate 的相反順序執(zhí)行回滾,即先在 admin 執(zhí)行一次,然后再到 web 里再執(zhí)行一次。我們上面的實(shí)驗(yàn)很簡單,要記住這些順序也不難,可是在實(shí)際的項(xiàng)目中,你的 migrations 就比這個復(fù)雜多了,而且只通過 migrate:status 你也看不出來執(zhí)行順序到底是怎么樣的,所以在各個項(xiàng)目里各自維護(hù)各自的 migrations 似乎行不通...
共用一份 migration
上面的實(shí)驗(yàn)我們可以知道,我們在執(zhí)行 artisan migrate 的時候,Laravel 會讀取 migrations 目錄里的文件和數(shù)據(jù)庫里的記錄,然后再執(zhí)行相應(yīng)的操作(并記錄這次操作);回滾的時候 Laravel 會讀取數(shù)據(jù)庫中的記錄,然后執(zhí)行 migrations 目錄里相應(yīng)的文件中的 down 方法。
而當(dāng) migrations 分散在不同的項(xiàng)目(目錄)里的時候,不管你在哪個項(xiàng)目中執(zhí)行 migrate:rollback 時,都可能只有一部分 migration 文件被加載進(jìn)來,因此會造成一些奇奇怪怪的問題。
那我們可以將所有 migrations 放在同一個地方,怎么操作呢?再建一個新的項(xiàng)目似乎有點(diǎn)麻煩了...我們先看看幫助吧:
php artisan migrate --helpDescription: Run the database migrationsUsage: 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,先來看看這兩個參數(shù)是什么用途:
--path[=PATH] 指定 migrations 文件的路徑
--realpath 表示 --path 指定的路徑為絕對路徑
那我們在進(jìn)行 migrations 操作的時候,指定同一個路徑,那就可以共用 migrations 了:
php artisan make:migration foo --path="../admin/database/migrations"# orphp artisan make:migration foo --path="/the/absolute_path/to/admin/database/migrations" --realpath# migratephp artisan migrate --path="../admin/database/migrations"# migrate:rollbackphp artisan migrate:rollback --path="../admin/database/migrations"
注:當(dāng)你不帶 --realpath 的時候,path 是以項(xiàng)目的根目錄為 / 的
總結(jié)
所以,當(dāng)我們需要在多個 Laravel 項(xiàng)目中共用 migrations 的時候,最好的做法是通過 --path 指定 migrations 文件的目錄,這個目錄可以是一個獨(dú)立的 git repo,也可以是其中一個 Laravel 項(xiàng)目(我個人推薦放在其中一個項(xiàng)目中,采用獨(dú)立的 git 分支),這樣既可以共用 migrations,在團(tuán)隊(duì)協(xié)作的時候也不會混亂和出現(xiàn)沖突
好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對金聰精品的支持。
1.軟件源碼推廣展示:目的展示軟件相關(guān)功能,接收技術(shù)學(xué)習(xí)者測試、測評;
2.教程課程信息展示:展示課程信息,傳授課程各階段內(nèi)容;
3.設(shè)計素材圖片展示:展示素材設(shè)計理念、思維方式、傳播設(shè)計理念;
4.福利優(yōu)惠信息展示:分享各類最新的福利信息,各種優(yōu)惠信息展示;
以上分享目的僅供學(xué)習(xí)、參考使用,請勿用于其他用途,如果想商業(yè)使用或者代理,請自行聯(lián)系版權(quán)方獲取授權(quán)。任何未獲取授權(quán)的商業(yè)使用與本站無關(guān),請自行承擔(dān)相應(yīng)責(zé)任。
本站不存儲任何資源文件,敬請周知!
如果您認(rèn)為本頁信息內(nèi)容侵犯了您的相關(guān)權(quán)益(包含但不限于:著作權(quán)、首發(fā)權(quán)、隱私權(quán)等權(quán)利),或者您認(rèn)為自己是此信息的權(quán)利人但是此信息不是自己發(fā)布的,可以直接版權(quán)舉報投訴,我們會根據(jù)網(wǎng)站注冊協(xié)議、資源分享協(xié)議等協(xié)議處理,以保護(hù)您的合法權(quán)益。
本網(wǎng)站采用 BY-NC-SA 協(xié)議進(jìn)行授權(quán) 轉(zhuǎn)載請注明原文鏈接:多個Laravel項(xiàng)目如何共用migrations詳解

侵權(quán)舉報/版權(quán)申訴



