laravel遷移文件

laravel遷移文件的命令

Laravel鼓勵敏捷、迭代的開發方式,我們沒指望在第一次就獲得所有正確的。
我們對于自己編寫代碼,可以通過遷移文件,不斷的重復去測試.
對于工作,我們開發一個完整的項目,是需要我們每個人相互配合,就好比用svn,git版本控制工具來存儲應用程序的源代碼文件,使我們能夠撤消錯誤和追蹤開發過程中的改變。

但應用程序更改時,存在我們不能單獨使用版本控制進行有效管理的區域。在我們如果使用laravel框架開發項目,這個過程中,Laravel應用程序的數據庫架構不斷演變:如我們在這里添加了一個表,在那里重命名列,刪除索引等等,然后出現錯誤我們可以直接找到哪里出的錯,是誰操作的,便于直接解決問題和團隊開發.

當你需要一個復雜的方法來跟蹤您的數據庫架構更改,通常有幾種方法:

1.當您在開發團隊內工作時,每人都需要知道關于任何架構的更改。
2.當你在生產服務器上部署時,您需要有穩健的方式來升級您的數據庫架構。
3.如果您在多臺機器上工作,你需要保持所有數據庫架構的同步。

如果沒有嚴格的約定和紀律讓應用程序開發者遵循,保持數據庫架構與應用程序代碼同步歷來是一個非常麻煩的工作。開發者(或數據庫管理員) 進行所需的架構更改。但是,如果應用程序代碼回滾到以前的版本,但是很難撤消數據庫架構更改,照成數據庫版本信息與應用程序代碼版本信息不一致。

遷移就是幫助你進化你的代碼數據,它不需要你在每次改變的時候delete或者alert數據庫。沒有刪除和重建就意味著你不會在每次改變的時候丟失數據。當你執行遷移時唯一的改變就是將數據庫架構從一個版本移到另一個版本,不管是向前還是向后移,相對于svn這樣的。

Laravel遷移給你提供了一種在迭代方式中修改數據庫架構的手段,它不需要你用SQL操作,而是直接使用封裝好的類。Laravel架構生成器允許我們快速創建數據庫表和插入列或索引。它使用清潔和富有表現力的語法來操作數據庫。你也許為認為Laravel遷移就是數據庫的版本控制。

通過定義一個更高級別的接口來創建和維護數據庫架構,你可以用與數據庫無關的方式定義它。通過使用 PHP 來創建表,定義列和索引,寫一次架構并將其應用到任何所支持的數據庫后端。

以上參考Database Migration using Laravel和自己的理解.

laravel 遷移文件基礎

laravel遷移文件是定義在laravel框架項目根目錄下database/migrations下,在這里可以進行表的創建,列的添加和刪除,版本的回退功能,直接用命令去操作,把遷移文件直接保存到目錄中方便操作,就好比把php代碼直接保存.但是在laravel中的遷移命令都是依靠Artisan工具去執行的.

laravel遷移文件的生成

一個非常見簡單的命令,但是我們需要使用laravel的artisan工具,同樣的也需要配置好我們的php環境,能夠在命令行中去執行,首先下面的是創建表的遷移文件
php artian make:migration create_table_goods --create=goods

qian.png

這個命令呢是創建一個叫做goods表的遷移文件,在命令行中去執行,成功之后,來到database/migration目錄中:

wen.png

那么在up方法中可以執行添加列的語句如:

public function up() { Schema::create('goods', function (Blueprint $table) { $table->increments('id'); $table->string('email');//添加email字段 $tbale->integer('mobile');//添加moble字段 $table->timestamps(); }); } 

那么怎么生成呢?php artisan migrate //執行所有的遷移文件的命令
在項目根目錄執行這個命令,成功,去查看自己的數據庫,多出一個goods表

假如我做項目,做到一半發現這個表中,缺少一個那么的字段,那怎么辦呢,手動去數據庫中添加么,不用的?我們還可以用遷移文件去完成
php artisan make:migration add_name_to_goods --table=goods

add1.png

在命令行中去執行成功之后來到遷移文件目錄下

add2.png
    public function up() { Schema::table('goods', function (Blueprint $table) { $table->string('name');//添加name字段 }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('goods', function (Blueprint $table) { $table->dropColumn('name');//刪除字段以便于后期修改錯誤一定要寫 }); 

再次執行遷移文件,發現goods表中多出一個name字段,說明我們添加成功
那么我們在看一下artisan其他的命令

   migrate:install在內部,Laravel使用特殊的表來跟蹤哪些遷移已經運行。若要創建此表,只需要用artisan命令行工具:php artisan migrate:installmigrate你將會運行migrate任務頻繁的更新你的數據庫,以支持你添加到應用程序中的最新的表和列。最基本的形式,它只會對那些所有沒有被運行過的遷移運行up()方法。migrate:rollback在寫遷移時偶爾也會犯錯誤。如果你已經運行了遷移,那么你不能只是編輯遷移和再次運行遷移:Laravel假定它已經運行了遷移,那么當你再次運行artisan migrate,不會做任何事情。你必須使用artisan migrate:rollback回滾遷移,然后編輯遷移,再運行artisan migrate去運行正確的版本。migrate:reset回滾所有的遷移(會刪掉所有表和數據)migrate:refreshartisan migrate:refresh任務將刪除數據庫、 重新創建它并將加載當前架構。這是一個方便快方式去運行重置并隨后重新運行所有遷移。migrate:makeartisan migrate:make命令告訴 Laravel 來生成一個遷移文件骨架 (這是實際上是一個 PHP文件) ,存放到app/database/migrations文件夾中。然后,您可以編輯此文件來充實您的表/索引定義。然后,artisan migrate命令運行時,artisan會查詢此文件來生成 SQL DDL 的實際代碼。php artisan migrate --force: 強制執行最新的遷移文件

這就是laravel 遷移文件的強大之處,方便我們團隊去開發,省略不必要的麻煩

轉載于:https://www.cnblogs.com/qaing123/p/9510539.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250883.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250883.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250883.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

12 組合與繼承、CSS Module

組合與繼承 若Container內部有內容,React會在props內部增加children屬性若Container內部有非元素內容,children:非元素內容若Container內部有單個元素內容,children:React元素對象若Container內部有多個元素內容&…

工具分享 --- tinyPNG,大圖片壓縮工具

今天自己的寫的項目跑在了遠程服務器上… 圖片加載的速度讓人難以接受, 于是各種百度找到了一個在線找到了個圖片壓縮的網站 TinyPNG 可以看一下壓縮的效果…真心不錯啊… 網站如下: https://tinypng.com 額…有些大于5M的需要錢,才能壓縮… 用系統畫圖工具…貌似也能壓縮… …

Mysql 忘記管理員密碼更改

對管理員設置密碼第一種方式:#mysqladmin -u root password new-password;#mysqladmin -u root -h localhost password new-password;mysql的選項可以不帶空格,有時候帶空格是錯 第二種方式: set password for rootlocahostPASSWORED(); 第三…

ironic如何支持部署時按需RAID?

ironic如何支持部署時按需RAID? 新浪大神推薦使用element proliant-tools制作deploy image。element proliant-tools會在ipa ramdisk中安裝一個rpm包hpssacli(HP的RAID管理工具),和一個python module proliantutils(里…

14 代碼分割之lazy:Suspense與路由懶加載

lazy內置方法 Suspense內置組件 lazy是React提供的懶(動態)加載組件的方法,React.lazy() 能減少打包體積、延遲加載首屏不需要渲染的組件 依賴內置組件Suspense:給lazy加上loading指示器組件的一個容器組件 Suspense目前只和la…

三年工作的總結

其實開通博客已經有四年之久了,但遺憾的是從來沒有認真寫過一篇博客,只是在平時會瀏覽一些大牛寫過的博客。 其實我覺得做技術的定期總結自己的經驗還是很重要的。 不知不覺參加工作已經三年了,三年時間真的過得很快,想當初帶著一腔熱血,一個背包走天下,來到上海,從零開始&…

css --- 兄弟選擇器

語法: /* 查找后邊的一個兄弟元素 */ 兄弟元素 兄弟元素/* 查找后邊的所有兄弟元素 */ 兄弟元素 ~ 兄弟元素<head><style>#maindiv {color: red;}#main~div {background-color: #e0e0e0;}</style> </head> <body><div id"main"&g…

面向對象特征:封裝、多態 以及 @propetry裝飾器

&#xff08;繼承補充&#xff09;組合objfun()#對象obj.attrfoo()#對象的屬性等于另一個對象什么是組合&#xff1a; A類的對象具備某一個屬性&#xff0c;該屬性的值是B類的對象基于這種方式就把A類與B類組合到一起對象既能使用A類中的數據與功能&#xff0c;也能使用B類中的…

15 錯誤邊界與使用技巧

錯誤邊界 React16增加防止某個組件的UI渲染錯誤導致整個應用崩潰子組件發生JS錯誤&#xff0c;有備用的渲染UI錯誤邊界是組件&#xff0c;只能用class組件來寫 錯誤邊界組件捕獲錯誤的時機 渲染時生命周期函數中組件樹的構造函數中 getDerivedStateFromError 生命周期函數…

深入探究Spark -- Cluster Manger部署(最常用為YARN實現Task Scheduler)

部署方式有&#xff1a;Standalone&#xff08;Spark的Deploy模塊&#xff09;、Mesos、YARN、EC2、LocalSparkContext創建時&#xff0c;通過傳入的Master URL不同&#xff0c;創建不同的SchedulerBackend和TaskScheduler&#xff0c;在spark.SparkContext#createTaskSchuster…

es6 --- Promise.all等待多個異步任務執行

項目中遇到一個問題,要用多個http請求,獲取數據,然后將獲取的數據統一處理… 第一反應想到用promise.all來做… 下面進入主體 // 首先使用promise封裝http請求. function getListByDetecttype (params) {return new Promise((resolve, reject) > {let param params ? par…

16 代碼分割之錯誤邊界與Suspense和命名導出

代碼分割之錯誤邊界與Suspense const Main React.lazy(() > import(./main)) class ErrorBoundary extends React.Component {state {hasError: false,}static getDerivedStateFromError(err) {console.log(getDerivedStateFromError err, err)return {hasError: true}}c…

Python 原生爬蟲

Python3 實現游戲主播人氣排行榜 from urllib import request import re# 爬取某個游戲主播的人氣&#xff08;每個游戲主播的觀看人數&#xff09;排行榜 爬蟲前奏&#xff1a;明確爬蟲目的找到數據對應的網頁分析網頁的結構找到數據所在的標簽位置模擬HTTP請求&#xff0c;向…

Mac 下查看網絡端口占用情況

1、Mac 下查看網絡端口占用情況 有的時候關閉了服務器&#xff0c;但是端口還是占用&#xff0c;解決的方法是 kill 掉占用該端口的進程。 # 查看 8009 端口的占用情況 $ lsof -i:8009 可以看到&#xff0c;該端口被 id 為 4215 的進程所占用&#xff0c;這個時候直接在命令…

javascript --- 變量提升的理解

看下面一段代碼: (function () {var x foo();var foo function foo () {return "foobar";};return x; })();(不許打出來)猜猜返回結果是什么… 答案是 // foo is not a function下面來解釋為什么會這樣,首先得明白: 1.如果變量聲明了但未賦值,則會顯示undefined…

17 初探Context的使用場景

context 容器&#xff08;即上下文&#xff09; → 裝數據 → 可以傳遞到程序的多個地方程序在執行時可訪問的容器 import styles from ...則css要寫module.css&#xff0c;否則無效果&#xff1b; import from ...則css無須寫module. &#xff0c;否則無效果 使用 context.j…

分布式監控系統開發【day37】:需求討論(一)

本節內容 為什么要做監控&#xff1f; 常用監控系統設計討論監控需求討論如何實現監控服務器的水平擴展&#xff1f;監控系統架構設計一、為什么要做監控&#xff1f; 熟悉IT監控系統的設計原理開發一個簡版的類Zabbix監控系統掌握自動化開發項目的程序設計思路及架構解藕原則…

iOS:練習題中如何用技術去實現一個連線題

一、介紹 本人做的app涉及的是教育行業&#xff0c;所以關于練習題的開發肯定是家常便飯。例如&#xff0c;選擇題、填空題、連線題、判斷題等&#xff0c;每一種題型都需要技術去實現&#xff0c;沒啥多大難度&#xff0c;這里呢&#xff0c;就給出實現連線題的核心代碼吧。過…

18 Context與組合的應用場景與使用問題

contextType 指定context類型為創建的上下文&#xff0c;此時不需要用Consumer組件包裹&#xff0c;使用this.context即可訪問會向上找最近的上下文并取值最適合的場景&#xff1a;雜亂無章的組件都需要同一些數據&#xff1b;若單純為了不層層傳遞屬性&#xff0c;使用contex…

http --- 共享加密(對稱加密)的幾個概念

使用互聯網進行數據傳輸時,可能會產生以下四個問題: 1. 竊聽: A向B發送的消息,有可能在傳輸過程中被X竊聽到 2. 假冒: A收到來自B的消息有可能是X冒充的 3. 篡改: A確實收到來自B的消息,但是該消息有可能被X篡改了 4. 事后否認:B確實收到了來自A的消息,但是A是惡意用戶,當A像B…