Laravel-模型工廠&填充數據

學習筆記,質量不高,純屬加深個人理解,請勿浪費時間閱讀。

總結

數據填充

  • 模型工廠database/factories
  • 數據填充,生成seeder文件,定義填充字段方法
  • Database/Seeder調用call方法
  • 執行migrate:refresh&&db:seed重置數據庫

模型工廠

  • define綁定的模型類,以及在閉包中依賴注入Faker
    • 將pwd設置靜態變量(全局共享,所有數據密碼均一致)
    • 設置需要填充的字段並return

數據填充

  • artisan生成指定seeder文件
    • 引入需要填充的模型類(數據表)命名空間
    • 在run方法中定義執行的模型和插入字段屬性、
      • factory(需要生成的模型類)->times(執行次數)->make(生成合集)
      • 模型::insert(模型->makeVisible([模型中被隱藏的字段])->toArray())
      • 設置指定用戶,便於在填充後方便測試
  • database/seeds/DatabaseSeeder.php調用call方法執行數據填充
    • 引入基類模型的命名空間
    • 在run方法中臨時解除字段注入
      • 調用Model::unguard() 解除字段注入
      • $this->call(需要填充的seeder類文件)
      • Model::regurad()恢復字段注入限制
  • 重置數據庫&&快速填充
    • php artisan migrate:refresh 重置數據
    • php artisan db:seed (默認執行所有seeder文件填充) 可通過--class=指定seeder文件
    • php artisan migrate:refresh --seed 同時完成數據庫的重置和填充操作

分頁

  • 控制器調用模型::paginate(每頁顯示條數)
  • 視圖中調用{!! 模型實例->render() !!}


簡介:實例用戶

在實際項目開發過程中,經常需要用到假數據對數據庫進行填充以方便調試,原始做法是手工對數據庫一個個創建,或者從團員的機器導入數據到開發環境中。lara提供一套更現代化、簡單易用的數據填充方案。假數據分爲兩個步驟

  • 對要生成假數據的模型指定字段進行賦值-模型工廠factory
  • 批量生成假數據模型數據填充seeds

模型工廠

lara默認集成了faker拓展包。

//創建模型工廠實例
$faker=Faker\Factory::create()

//$faker->字段()方式調用
//生成用戶名
$faker->name;

databases/factories/UserFactory.php
這裏寫圖片描述

define定義一個指定數據模型(如圖User)的模型工廠。define接收兩個參數

  • 第一個爲指定的Eloquent模型類
  • 第二個爲閉包函數,接收Fakerphp函數庫實例
  • 方法體中生成假數據併爲模型指定字段賦值

數據填充

lara中使用seeder對數據庫填充測試數據。所有的seeder類文件存放在database/seeds目錄下。創建時需要按照駝峯法來命名。LARA中約定了相關配置,例如User模型對應Users表,使用artisan創建seedrs時應命名爲UsersTableSeeder

$ php artisan make:seeder UsersTableSeeder

databases/seeds/UsersTbaleSeeder
創建成功後,需要引入需要填充的模型(數據表)的命名空間,並且在run方法中定義相關字段
這裏寫圖片描述

接下來還需要在DatabaseSeeder中調用call方法運行指定的假數據填充文件
這裏寫圖片描述

完成上述操作後,可以開始生成假數據了。在此之前建議migrate:refresh重置數據庫

//重置數據庫
$ php artisan migreate:refresh
//此處沒有指定,即執行所有seed文件,可使用 --clas=指定執行填充的文件
$ php artisan db:seed

如果需要單獨指定執行UsersTableSeeder數據庫填充文件,可以如下

$ php artisan migrate:refresh
$ php artisan db:seed --class=UsersTableSeeder

當然,也可以使用一條命名完成整個數據庫重置和填充操作

$ php artisan migreate:refrsh --seed

分頁相關

如果在頁面一次性讀取所有用戶,此時網頁響應速度會下降,影響性能。可使用分頁讀取數據庫中部分數據

控制器

//在需要分頁的地方調用 模型::paginate(讀取條數)即可
$user=User::paginate(10);
//綁定參數返回視圖
return view('視圖',compact('users'));

視圖

//類似smarty模版的定界符設定,
//Boostrap框架的樣式,渲染出來的視圖連接統一帶會帶上 ?page來指定頁數的連接 
//以往的blade模版使用的是{{}}方式,此處需要使用{!! !!}這樣生成的html連接纔不會被轉義

//在視圖中添加如下指令
{!! $users->render() !!}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章