1. 程式人生 > >Laravel 進階筆記 4

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