次のチュートリアルコラムでは、何百万ものシミュレーションデータを生成するためのLaravel Seederについて紹介します。
Laravel は Faker ライブラリを統合し、シミュレーション データを簡単に生成できるように Seeder を提供します。最初にデータ ウェアハウスとデータ入力コードを記述します
データ ウェアハウス コード
use App\Models\Topic;use Faker\Generator as Faker;$factory->define(Topic::class, function (Faker $faker) { $sentence = $faker->sentence(); // 随机取一个月以内的时间 $updated_at = $faker->dateTimeThisMonth(); // 传参为生成最大时间不超过,因为创建时间永远比更改时间要早 $created_at = $faker->dateTimeThisMonth($updated_at); return [ 'title' => $sentence, 'body' => $faker->text(), 'excerpt' => $sentence, 'created_at' => $created_at, 'updated_at' => $updated_at, ];});
データ入力コード
class TopicsTableSeeder extends Seeder{ /** * Run the database seeds. * * @return void */ public function run() { // 所有用户ID数组,如:[1,2,3,4] $user_ids = User::all()->pluck('id')->toArray(); // 所有分类 ID 数组,如:[1,2,3,4] $category_ids = Category::all()->pluck('id')->toArray(); // 获取 Faker 实例 $faker = app(Faker\Generator::class); $topics = factory(Topic::class) ->times(1000) ->make() ->each(function ($topic, $index) use ($user_ids, $category_ids, $faker){ // 从用户 ID 数组中随机取出一个并赋值 $topic->user_id = $faker->randomElement($user_ids); // 话题分类,同上 $topic->category_id = $faker->randomElement($category_ids); }); // 将数据集合转换为数组,并插入到数据库中 Topic::insert($topics->toArray()); }}
times() Number を介して入力を設定します場合によっては、データ充填コマンドを実行して、トピック テーブルに 1000 個のデータを充填します。これは非常に便利です。
php artisan db:seed --class=TopicsTableSeeder
100万個のデータを挿入したい場合、times()のパラメータを1000,000に変更するだけでよいでしょうか?これを実行すると、次のエラーが表示されます。
General error: 1390 Prepared statement contains too many placeholders
この問題は、mysql がデフォルトで最大 65535 (2^16-1) のプレースホルダーをサポートし、書き込まれるデータが m 列、n 行であるためです。 m*n は 65535 未満である必要があります。
そのため、一度に大量のデータを挿入することは不可能であり、
php 職人 db:seedを確認したところ、実行回数に関連するパラメータはありませんでした。
最終的に、シェル スクリプトを使用して解決することにしました。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">for (( i = 0; i < 1000; i++ )); do
/usr/local/bin/php artisan db:seed --class=TopicsTableSeederdone</pre><div class="contentsignin">ログイン後にコピー</div></div>
ちょっと待ってください。100 万個のデータが生成されていることがわかります。
PS: データ ウェアハウスとデータ入力コードは larabbs から提供されています
推奨:最新の 5 つの Laravel ビデオ チュートリアル
以上がLaravel Seederが何百万ものシミュレーションデータを生成する方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。