Laravel用來生成資料表資料的技術
5.*版的 Laravel會把所有Seeder檔案放在seeds資料夾,8.*版起則更名為seeders
php artisan make:seeder {表格名稱單數}Seeder
php artisan make:model {表格名稱單數}
\\database\seeders\ItemSeeder.php
use App\Models\Item;
public functin run()
{
//清除表格所有資料,並將流水號計數器歸零
Item::truncate();
//建立假資料
Item::create(['欄位名稱'=>'值',...]);
}
//database\seeders\DatabaseSeeder.php
use Illuminate\Support\Facades\DB;
public function run()
{
//關閉外鍵偵測
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
$this->call(ItemSeeder::class);
//開啟外鍵偵測
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
}
//透過DatabaseSeeder.php
php artisan db:seed
//不透過DatabaseSeeder.php
php artisan db:seed --class={Seeder類別}
//App\Models\Item.php
class Item extends Model{
protected $table = 'titems';
}
當遇到內容無法正常顯示,或者抓不到檔案時請服用
composer dump-autoload
//App\models\Item.php
class Item extends Model{
protected $timestamps = false;
}
rand(最小值,最大值) 生成隨機數
是在PHP裏頭負責處理日期運算的套件,非常強大。
使用前可使用 use \Carbon\Carbon; 來導入
\Carbon\Carbon::setLocale('zh_TW'); 設定Carbon套件的語系
\Carbon\Carbon::now() 使用Carbon套件來生成日期
\Carbon\Carbon::parse($str) 將date字串進行轉換成carbon物件
\Carbon\Carbon::createFromFormat('Y-m-d',$date) 依照參數格式將date字串轉成Carbon物件
Carbon變數->year 取得年份
Carbon變數->month 取得月份
Carbon變數->addDays(8) 將此日期加上8天
Carbon變數->format('Y-m-d')將此日期依照yyyy-mm-dd的方式來呈現
Carbon變數->diffForHumans() 將顯示字串改成口語化表示
如需了解更多的Carbon資訊,可以參考https://kejyuntw.gitbooks.io/laravel-5-learning-notes/package/tool/package-tool-carbon.html
使用Faker來生成假資料
$faker = Faker\Factory::create('zh_TW'); 使用繁中語系
$faker->name 取得名字
$faker->randomDigit 取得0~9的隨機數字
$faker->randomDigitNot(0) 取得1~9的隨機數字
$faker->numberBetween(1,100) 取得1~100的隨機數字
$faker->address 取得地址
$faker->sentence($nbWords =3) 使用3個單字的句子
$faker->text 取得文章
$faker->realText($nbWords = 10) 取得字數為多少的中文內容
$faker->url 取得網址
$faker->imageurl($width = 640 , $height = 480) 取得圖片網址
$faker->unique()->email 取得Email,需為唯一
$faker->optional()->word 取得文字,偶而會得到null
$evenValidator = function($digit){
return $digit % 2 ==0;
}
$faker->valid($evenValidator)->randomDigit; 取得符合驗證規則的值
PS:如需了解更多的Faker資訊,可以參考Faker Github
Step 1.輸入指令php artisan make:factory {模型類別}Factory
Step 2.把seeder檔案有關欄位定義的內容都移進factory的陣列裡頭
此為5.x的版本
$factory->define(User::class,function(Faker $faker){
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
//略
];
});
此為8.x的版本
別忘了要自己生成Faker並use類別
protected $model = User::class;
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
$faker = Faker\Factory::create('zh_TW');
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
];
}
將Seeder裏頭關於欄位資料設定的部分移到Factory來處理,Seeder轉身成業務的腳色,只處理和Factory叫單的作業。只需要說明要叫單的模型類別,Laravel會自動找到對應的Factory類別
此為5.x版本寫法
\\Database\seeders\UserSeeder.php
factory(App\User::class,100)->create(); //建立users表格的假資料,共生成100筆
此為8.x版本寫法
\\Database\seeders\UserSeeder.php
User::factory()->times(100)->create(); //建立users表格的假資料,共生成100筆
factory()的最後面可以接create().make()以及raw()
create() 用Factory生成模型物件的集合後並據此存成資料庫資料
make() 用Factory生成模型物件的集合
raw() 用Factory生成資料的陣列