站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

詳解Laravel Seeder如何生成百萬模擬數(shù)據(jù)

下面由laravel教程欄目給大家介紹Laravel Seeder生成百萬模擬數(shù)據(jù),希望對需要的朋友有所幫助!

詳解Laravel Seeder如何生成百萬模擬數(shù)據(jù)

Laravel 集成了 Faker 庫,并提供了 Seeder 可以幫助我們輕松地生成模擬數(shù)據(jù)。

先書寫數(shù)據(jù)倉庫和數(shù)據(jù)填充代碼

數(shù)據(jù)倉庫代碼

use AppModelsTopic;use FakerGenerator as Faker;$factory->define(Topic::class, function (Faker $faker) {      $sentence = $faker->sentence();      // 隨機取一個月以內(nèi)的時間     $updated_at = $faker->dateTimeThisMonth();      // 傳參為生成最大時間不超過,因為創(chuàng)建時間永遠比更改時間要早     $created_at = $faker->dateTimeThisMonth($updated_at);      return [         'title' => $sentence,         'body' => $faker->text(),         'excerpt' => $sentence,         'created_at' => $created_at,         'updated_at' => $updated_at,     ];});

數(shù)據(jù)填充代碼

 class TopicsTableSeeder extends Seeder{     /**      * Run the database seeds.      *      * @return void      */     public function run()     {         // 所有用戶ID數(shù)組,如:[1,2,3,4]         $user_ids = User::all()->pluck('id')->toArray();          // 所有分類 ID 數(shù)組,如:[1,2,3,4]         $category_ids = Category::all()->pluck('id')->toArray();          // 獲取 Faker 實例         $faker = app(FakerGenerator::class);          $topics = factory(Topic::class)             ->times(1000)             ->make()             ->each(function ($topic, $index) use ($user_ids, $category_ids, $faker){                 // 從用戶 ID 數(shù)組中隨機取出一個并賦值                 $topic->user_id = $faker->randomElement($user_ids);                  // 話題分類,同上                 $topic->category_id = $faker->randomElement($category_ids);             });          // 將數(shù)據(jù)集合轉(zhuǎn)換為數(shù)組,并插入到數(shù)據(jù)庫中         Topic::insert($topics->toArray());     }}

我們通過是 times() 設(shè)置了填充的次數(shù),執(zhí)行數(shù)據(jù)填充命令,可以將 1000 條數(shù)據(jù)填充至 topics 表中,這很方便。

php artisan db:seed --class=TopicsTableSeeder

如果我們想要插入 100w 條數(shù)據(jù),是不是把 times() 的參數(shù)改為 1000,000 就可以了?當你這樣做之后,你會發(fā)現(xiàn)如下報錯

General error: 1390 Prepared statement contains too many placeholders

這個問題是因為 mysql 默認支持的占位符最多為 65535(2^16-1) 個,寫入數(shù)據(jù)為 m 列,n 行。m*n 必須小于 65535。

所以沒法一次性插入大量數(shù)據(jù),查了一下 php artisan db:seed 也沒有提供執(zhí)行次數(shù)的相關(guān)參數(shù)。

最后,決定使用 shell 腳本進行解決。

for (( i = 0; i < 1000; i++ )); do     /usr/local/bin/php artisan db:seed --class=TopicsTableSeederdone

等待片刻,你會發(fā)現(xiàn) 100w 數(shù)據(jù)已經(jīng)生成完畢!

PS:數(shù)據(jù)倉庫和數(shù)據(jù)填充代碼來自 larabbs

推薦:最新的五個Laravel視頻教程

贊(0)
分享到: 更多 (0)
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
国产成人综合日韩精品无码| 四虎国产精品永久在线网址| 日韩色视频一区二区三区亚洲| 久久国产乱子伦精品免| 日韩精品无码一区二区三区四区| 久久久久久九九99精品| 日韩精品中文字幕第2页| 囯产精品久久久久久久久久妞妞| 自拍偷在线精品自拍偷| 国产伦子系列麻豆精品| 国产精品亚洲lv粉色| 久久亚洲国产精品五月天| 一夲道无码人妻精品一区二区 | 99精品视频在线免费观看| 日韩欧美亚洲中文乱码 | 99久久精品影院老鸭窝| 国产精品久久国产精品99| 精品人妻久久久久久888| 一本色道久久综合亚洲精品高清| 日韩精品电影在线观看| 久久精品无码一区二区无码| 亚洲国产精品无码一线岛国| 日韩一区二区三区精品| 中文字幕日韩一区二区三区不卡| 91情侣在线精品国产免费| 国产精品视频一区二区三区经 | 一本大道久久a久久精品综合| 国产精品无码制服丝袜| 久久99国产精品尤物| 久久久精品波多野结衣AV | 亚洲youwu永久无码精品| 久久99精品国产免费观看| 久热青青青在线视频精品| 国产精品毛片无遮挡| 亚洲精品第一国产综合精品99| 日韩精品一区在线| 国产综合精品在线| 国产精品成人无码免费| 国产区香蕉精品系列在线观看不卡| 亚洲精品美女网站| 亚洲国产成人精品不卡青青草原 |