Laravel數據庫遷移和填充(支持中文)

寫在前面

經常我們做項目都團隊協作開發,每個人都在自己本地的數據庫,如果你曾經出現過讓同事手動在數據庫結構中添加字段的情況,數據庫遷移可以解決你這個問題。

不僅如此,在線上部署的時候,也避免了手動導入數據庫或手動修改數據結構的麻煩,數據遷移幫你方便的維護著數據結構。

數據填充,讓我們測試的時候需要大量的假數據不再一條一條的去造數據,可以輕松的批量填充大量數據。

本文基于Laravel5.5,其他版本大同小異。

數據遷移

假如我們需要一張學生表,我們不再使用原生SQl語句去創建表。

創建遷移文件

前提是已經配置好了數據庫連接信息

php artisan make:migration create_students_table

此命令會在database/migrations/目錄生成類似2017_10_28_035802_create_students_table.php的文件

我們在里邊添加students表的數據結構

<?phpuse Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;class CreateStudentsTable extends Migration
{/*** Run the migrations.** @return void*/public function up(){// students為表名稱Schema::create('students', function (Blueprint $table) {// 存儲引擎$table->engine = 'InnoDB';// id自增$table->increments('id');// 學生名稱$table->string('name');// 性別$table->string('sex');// 郵箱$table->string('email');// 喜愛的顏色$table->string('favorite_color');// 手機號$table->string('phone');// 地址$table->string('addr');// 自動維護時間戳$table->timestamps();});}/*** Reverse the migrations.** @return void*/public function down(){Schema::dropIfExists('students');}
}

更多用法,請參考官方手冊。

運行遷移
php artisan migrate

這樣會運行database/migrations/目錄的所有遷移文件,并自動創建migrations表,來記錄已經運行過的遷移文件,防止重復運行。
我們看一下數據庫是不是自動創建了students表了呢。

如果出現以下錯誤:

[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was t
oo long; max key length is 767 bytes (SQL: alter table users add unique users_email_unique(email))[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was t
oo long; max key length is 767 bytes

在database/migrations/目錄里會有laravel自帶的用戶和重置密碼的兩個遷移文件,會一并運行。
在這里我們這樣解決,修改數據庫配置文件config/database.php里的mysql下的字符集為utf8即可

'charset'     => 'utf8',
'collation'   => 'utf8_unicode_ci',

想知道為什么,可猛戳 https://segmentfault.com/a/11...

數據填充(支持中文)

創建學生表Eloquent模型

在app目錄下創建Student.php

<?php
namespace App;use Illuminate\Database\Eloquent\Model;/*** 學生模型*/
class Student extends Model
{}
創建填充文件
php artisan make:seed StudentsTableSeeder

這條命令會在database/seeds/目錄下生成StudentsTableSeeder.php填充文件

<?phpuse Illuminate\Database\Seeder;class StudentsTableSeeder extends Seeder
{/*** Run the database seeds.** @return void*/public function run(){// 調用模型工廠 生成10000條數據factory(App\Student::class, 10000)->create();}
}
調用該 Seeders

我們打開database/seeds/DatabaseSeeder.php文件,修改為

<?phpuse Illuminate\Database\Seeder;class DatabaseSeeder extends Seeder
{/*** Run the database seeds.** @return void*/public function run(){// 調用學生表填充文件$this->call(StudentsTableSeeder::class);}
}
創建 模型工廠 填充
php artisan make:factory StudentsFactory -m Student

此命令會在database/factories/目錄下生成StudentsFactory.php文件,我們定義一下要填充的數據格式

<?phpuse Faker\Generator as Faker;/* @var Illuminate\Database\Eloquent\Factory $factory */$factory->define(App\Student::class, function (Faker $faker) {$sex = rand(1, 1000);return ['name'           => $faker->name,'sex'            => $sex % 2 == 0 ? '男' : '女','email'          => $faker->unique()->safeEmail,'favorite_color' => $faker->safeColorName,'phone'          => $faker->phoneNumber,'addr'           => $faker->address,];
});

更多配置請查閱 vendor/fzaninotto/faker/src/Faker/Generator.php文件

讓faker填充中文

在app/Providers/AppServiceProvider.php的boot()中添加:

    public function boot(){// 填充中文數據$this->app->singleton(\Faker\Generator::class, function () {return \Faker\Factory::create('zh_CN');});}
開始填充

首先我們執行一下:

composer dump-autoload

自動加載一下我們在database/seeds/目錄創建的填充文件,以避免出現以下錯誤:

[ReflectionException]
Class StudentsTableSeeder does not exist

接著我們運行填充命令:

php artisan db:seed

由于我們填充的是一萬條數據,可以時間稍長,可以刷新數據庫看著逐條增加的數據。

大功告成

如果以上操作都沒有報錯的話,來看一下我們的數據庫表students表是否有數據了呢?

id | name | sex | email | favorite_color | phone | addr | created_at |updated_at
---|------|------|------|------|------|------|------|------|------|---
10000 |談英 |男 |cum_et@example.com |白色 |17642207316 |貴陽海陵區 |2017-10-28 05:19:10 |2017-10-28 05:19:10
9999 |湯淑珍 |男 |qlaudantium@example.net |黑色 |18239453935 |南寧友好區 |2017-10-28 05:19:10 |2017-10-28 05:19:10
9998 |賈春梅 |男 |ea35@example.com |粟色 |17103645128 |長沙蕭山區 |2017-10-28 05:19:10 |2017-10-28 05:19:10
9997 |季志明 |男 |cdeleniti@example.com |灰色 |17002359608 |天津花溪區 |2017-10-28 05:19:10 |2017-10-28 05:19:10
9996 |成燕 |男 |aspernatur.aut@example.com |黃色 |17181193397 |貴陽錫山區 2017-10-28 05:19:|10 |2017-10-28 05:19:10
9995 |米博 |男 |reprehenderit_autem@example.com |紫 |17187328893 |廣州東麗區 |2017-10-28 05:19:10 |2017-10-28 05:19:10
9994 |蘭淑蘭 |女 |et_ea@example.com |綠色 |18592254358 |蘭州經濟開發新區 |2017-10-28 05:19:10 |2017-10-28 05:19:10
9993 |樂瑤 |女 |vel.vitae@example.org |藏青 |15891490007 |香港龍潭區 2017-10-28 05:19:|10 |2017-10-28 05:19:10
9992 |葉志新 |女 |lcumque@example.net |藏青 |15564391466 |北京高明區 |2017-10-28 05:19:10 |2017-10-28 05:19:10
9991 |胥楊 |男 |voluptatem00@example.com |黃色 |17097722096 |鄭州新城區 |2017-10-28 05:19:10 |2017-10-28 05:19:10
9990 |凌敏 |女 |magni22@example.org |鮮綠色 |13021578051 |杭州涪城區 |2017-10-28 05:19:10 |2017-10-28 05:19:10
9989 |席建 |女 |fugiat_accusantium@example.net |紫 |18070573726 |南昌海陵區 |2017-10-28 05:19:10 |2017-10-28 05:19:10
9988 |聶新華 |女 |debitis_sapiente@example.com |水色 |17004061646 |成都南長區 |2017-10-28 05:19:10 |2017-10-28 05:19:10

……

原文 https://www.tech1024.cn/origi...

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

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

相關文章

leetcode374. 猜數字大小(二分法)

猜數字游戲的規則如下&#xff1a; 每輪游戲&#xff0c;系統都會從 1 到 n 隨機選擇一個數字。 請你猜選出的是哪個數字。 如果你猜錯了&#xff0c;系統會告訴你這個數字比系統選出的數字是大了還是小了。 你可以通過調用一個預先定義好的接口 guess(int num) 來獲取猜測結果…

什么情況下你的工作最為成功_如何在沒有工作經驗的情況下獲得技術工作

什么情況下你的工作最為成功by Anthony Sistilli安東尼西斯蒂里(Anthony Sistilli) 如何在沒有工作經驗的情況下獲得技術工作 (How to get a tech job with no previous work experience) I run a free community called the Forge where I help students navigate the world …

jquery批量刪除

前臺代碼 <!doctype html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, minimum-scale1.0">…

MUI 里js動態添加數字輸入框后,增加、減少按鈕無效

https://www.cnblogs.com/ssjf/p/10193652.html numbox 的自動初化是在 mui.ready 時完成的mui 頁面默認會自動初始化頁面中的所有數字輸入框&#xff0c;動態構造的 DOM 需要進行手動初始化。比如&#xff1a;您動態創建了一個 ID 為 abc 的數字輸入框&#xff0c;需要 mui(#a…

Django——認證系統(Day72)

閱讀目錄 COOKIE 與 SESSION 用戶認證 COOKIE 與 SESSION 概念 cookie不屬于http協議范圍&#xff0c;由于http協議無法保持狀態&#xff0c;但實際情況&#xff0c;我們卻又需要“保持狀態”&#xff0c;因此cookie就是在這樣一個場景下誕生。 cookie的工作原理是&#xff1a;…

description方法

1.description基本概念 NSLog("%", objectA);這會自動調用objectA的description方法來輸出ObjectA的描述信息. description方法默認返回對象的描述信息(默認實現是返回類名和對象的內存地址) description方法是基類NSObject 所帶的方法,因為其默認實現是返回類名和…

leetcode面試題 10.05. 稀疏數組搜索(二分法)

稀疏數組搜索。有個排好序的字符串數組&#xff0c;其中散布著一些空字符串&#xff0c;編寫一種方法&#xff0c;找出給定字符串的位置。 示例1: 輸入: words [“at”, “”, “”, “”, “ball”, “”, “”, “car”, “”, “”,“dad”, “”, “”], s “ta” 輸出…

laravel框架制作縮略圖和水印

1.首先需要使用 composer 在命令行安裝最新版本的 intervention/image &#xff1a; composer require intervention/image2.注冊服務提供者及別名&#xff08;Laravel 版本 ≤ 5.4&#xff09; 如果你的 laravel 版本小于或等于 5.4&#xff0c;安裝后需要注冊服務提供者和別…

mysql 模糊查詢 tp框架_TP框架中模糊查詢實現

TP框架中模糊查詢實現$where[g.name] array(like,%.$groupname.%);表達式查詢上面的查詢條件僅僅是一個簡單的相等判斷&#xff0c;可以使用查詢表達式支持更多的SQL查詢語法&#xff0c;查詢表達式的使用格式&#xff1a;$map[字段1] array(表達式,查詢條件1);$map[字段2] ar…

肉體之愛的解釋圣經_可以解釋的AI簡介,以及我們為什么需要它

肉體之愛的解釋圣經by Patrick Ferris帕特里克費里斯(Patrick Ferris) 可以解釋的AI簡介&#xff0c;以及我們為什么需要它 (An introduction to explainable AI, and why we need it) Neural networks (and all of their subtypes) are increasingly being used to build pro…

Python可變與不可變類型及垃圾回收機制

1. 可變與不可變類型 1.1 可變類型 在id不變的情況下&#xff0c;value可以改變&#xff0c;則稱之為可變類型。列表、字典與集合是可變的。 l1 [1,2,3,4,5] print(id(l1)) l1[1] 520 #改變列表元素 print(id(l1)) result&#xff1a; 1700748379208 …

12-1 12 防盜鏈 訪問控制 php解析 代理

2019獨角獸企業重金招聘Python工程師標準>>> 12.13 Nginx防盜鏈 12.14 Nginx訪問控制 12.15 Nginx解析php相關配置 12.16 Nginx代理 擴展 502問題匯總 http://ask.apelearn.com/question/9109location優先級 http://blog.lishiming.net/?p10012.13 Nginx防盜鏈 用來…

leetcode911. 在線選舉(二分法)

在選舉中&#xff0c;第 i 張票是在時間為 times[i] 時投給 persons[i] 的。 現在&#xff0c;我們想要實現下面的查詢函數&#xff1a; TopVotedCandidate.q(int t) 將返回在 t 時刻主導選舉的候選人的編號。 在 t 時刻投出的選票也將被計入我們的查詢之中。在平局的情況下&…

1-13句子逆序

題目描述 將一個英文語句以單詞為單位逆序排放。例如“I am a boy”&#xff0c;逆序排放后為“boy a am I”所有單詞之間用一個空格隔開&#xff0c;語句中除了英文字母外&#xff0c;不再包含其他字符 接口說明 /** * 反轉句子 * * param sentence 原句子 * return 反轉后的…

單例模式實現DB類

創建一個類 class DB_class {//public $name andy;//私有的屬性private static $db;//公共的靜態方法public static function index(){if (self::$db ! null ){return self::$db;}self::$dbnew DB_class();return self::$db;}//私有的構造方法private function __construct()…

終端定時任務 開始緩沖_如何開始使用終端以提高生產力

終端定時任務 開始緩沖by Luciano Strika通過盧西亞諾斯特里卡(Luciano Strika) 如何開始使用終端以提高生產力 (How to start using the terminal to be more productive) As developers, the terminal can be our second home.作為開發人員&#xff0c;碼頭可以成為我們的第…

圖片預覽------photoswipe 使用

photoswipe 使用 預覽圖片后&#xff0c;需要點擊關閉按鈕才能關閉&#xff0c;點擊圖片事件效果是放大圖片&#xff0c;和微信的效果不一致&#xff0c;最后改用微信預覽圖片的接口了&#xff0c;但是例子可以用&#xff0c;記錄一下&#xff01;&#xff01; http://www.cnbl…

SSKeychain

Keychain 使用? ---為了實用最大化我覺得我應該直接先說使用&#xff01; 當然是使用第三方庫啦&#xff1a;sskeychain 3000星星的庫不開玩笑。github地址&#xff1a;https://github.com/soffes/sskeychain 導入完之后首先&#xff0c;編譯一下有無錯。 如果是自己手動導入&…

shell高級-----正則表達式

正則表達式概述 正則表達式是一種定義的規則&#xff0c;Linux工具可以用它來過濾文本。 基礎正則表達式 純文本 [rootnode1 ~]# echo "this is a cat" | sed -n /cat/p this is a cat [rootnode1 ~]# echo "this is a cat" | gawk /cat/{print $0} this …

leetcode130. 被圍繞的區域(bfs)

給定一個二維的矩陣&#xff0c;包含 ‘X’ 和 ‘O’&#xff08;字母 O&#xff09;。 找到所有被 ‘X’ 圍繞的區域&#xff0c;并將這些區域里所有的 ‘O’ 用 ‘X’ 填充。 示例: X X X X X O O X X X O X X O X X 運行你的函數后&#xff0c;矩陣變為&#xff1a; X X…