Laravel 進階筆記 4
seed可以開發測試環境新增假資料, 而migrate功能可以在生產環境填充真實, 或曰原始資料,
$categories = [ [ 'name' => '分享', 'description' => '分享創造,分享發現', ], [ 'name' => '教程', 'description' => '開發技巧、推薦擴充套件包等', ], [ 'name' => '問答', 'description' => '請保持友善,互幫互助', ], [ 'name' => '公告', 'description' => '站點公告', ], ]; //這裡發現可以直接操作資料庫的東西了, 有點兒接近sql了. DB::table('categories')->insert($categories);
寫在migrate的檔案裡面, up方法, 然後直接php artisan:migrate, 就能把舊的migrate自己完成了了, 有新的migrate, 就用
$ php artisan make:migration seed_categories_data
生成migrate檔案.
程式碼生成器
啥? 機器人都會寫程式碼了? 很有可能的事, 現在程式設計都傻瓜化了..
問題是, 如果快速寫出符合程式碼規範的程式碼, 除了機器人, 還能有誰? 有個好東西叫summerblue/generator.
$ composer require "summerblue/generator:~1.0" --dev
--dev表示僅在開發環境使用.
首先, 整理一下需要新建的模型物件吧, 例如:
欄位名稱 描述 欄位型別 加索引緣由 其他
title 帖子標題 字串(String) 文章搜尋 無
body 帖子內容 文字(text) 不需要 無
user_id 使用者 ID 整數(int) 資料關聯 unsigned()
category_id 分類 ID 整數(int) 資料關聯 unsigned()
reply_count 回覆數量 整數(int) 文章回複數量排序 unsigned(), default(0)
view_count 檢視總數 整數(int) 文章檢視數量排序 unsigned(), default(0)
last_reply_user_id 最後回覆的使用者 ID 整數(int) 資料關聯 unsigned(), default(0)
order 可用來做排序使用 整數(int) 不需要 default(0)
excerpt 文章摘要,SEO 優化時使用 文字(text) 不需要 nullable()
slug SEO 友好的 URI 字串(String) 不需要 nullable()
只有下面一行, 就把view, controller, 資料庫全搞定.
$ php artisan make:scaffold Topic --schema="title:string:index,body:text,user_id:integer:unsigned:index,category_id:integer:unsigned:index,reply_count:integer:unsigned:default(0),view_count:integer:unsigned:default(0),last_reply_user_id:integer:unsigned:default(0),order:integer:unsigned:default(0),excerpt:text:nullable,slug:string:nullable"
接著就是填充10個User跟100個Topics的假資料進去.方便測試分頁功能.
填充資料需要4個檔案:
1. 模型, 比如User.php 已經有了
2. 資料工廠, database/factories/UserFactory.php
資料工廠裡面使用了一個以Faker作為輸入的閉包, 這個閉包裡面有假資料的產生方法, 由於要增加introduction欄位的填充, 用Faker的sentence方法, 隨機產生一些小文字, 作為instroduction即可
然後用命令產生資料填充檔案:
$ php artisan make:seed UsersTableSeeder
3. 使用者的資料填充, database/seeds/UsersTableSeeder.php
這個seed裡面定義了要生成10個數據, 以及第一個資料要特殊化處理, 因為是管理員
4. 註冊資料填充, database/seeds/DatabaseSeeder.php
理論上可以同時生成多種模型資料, 目前就先生成User先.
public function run() { $this->call(UsersTableSeeder::class); //$this->call(TopicsTableSeeder::class); }
開始造假:
$ php artisan db:seed
接著topics的填充也是一樣, 模型, 資料工廠, 填充規則, 呼叫四步四個檔案.
然後重新填充即可:
$ php artisan migrate:refresh --seed