學習筆記,質量不高,純屬加深個人理解,請勿浪費時間閱讀。
總結
數據填充:
- 模型工廠
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模型類
- 第二個爲閉包函數,接收
Faker
php函數庫實例 - 方法體中生成假數據併爲模型指定字段賦值
數據填充
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() !!}