ホームページ  >  記事  >  PHPフレームワーク  >  Laravel Seederが何百万ものシミュレーションデータを生成する方法の詳細な説明

Laravel Seederが何百万ものシミュレーションデータを生成する方法の詳細な説明

藏色散人
藏色散人転載
2021-03-26 17:01:102748ブラウズ

次のチュートリアルコラムでは、何百万ものシミュレーションデータを生成するためのLaravel Seederについて紹介します。

Laravel は Faker ライブラリを統合し、シミュレーション データを簡単に生成できるように Seeder を提供します。

Laravel 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

を確認したところ、実行回数に関連するパラメータはありませんでした。

最終的に、シェル スクリプトを使用して解決することにしました。 <pre class="brush:php;toolbar:false">for (( i = 0; i &lt; 1000; i++ )); do     /usr/local/bin/php artisan db:seed --class=TopicsTableSeederdone</pre>ちょっと待ってください。100 万個のデータが生成されていることがわかります。

PS: データ ウェアハウスとデータ入力コードは larabbs から提供されています

推奨:

最新の 5 つの Laravel ビデオ チュートリアル

以上がLaravel Seederが何百万ものシミュレーションデータを生成する方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。