Php nghệ nhân di chuyển hạt giống

Để tạo seeder, bạn có thể sử dụng lệnh Artisan make:seeder. Tất cả các seeder được tạo sẽ được đặt trong thư mục database/seeds

$ php artisan make:seeder MoviesTableSeeder

Seeders được tạo sẽ chứa một phương thức. run. Bạn có thể chèn dữ liệu vào cơ sở dữ liệu của mình theo phương pháp này

 'A New Hope',
            'year' => '1977'
        ]];

        App\Movie::create[[
            'name' => 'The Empire Strikes Back',
            'year' => '1980'
        ]];
    }
}

Nhìn chung, bạn sẽ muốn gọi tất cả các seeder bên trong lớp DatabaseSeeder

Khi bạn viết xong các seeder, hãy sử dụng lệnh

 'A New Hope',
            'year' => '1977'
        ]];

        App\Movie::create[[
            'name' => 'The Empire Strikes Back',
            'year' => '1980'
        ]];
    }
}
0. Điều này sẽ chạy chức năng run của DatabaseSeeder

Cơ chế di chuyển của Laravel có chức năng gieo dữ liệu tuyệt vời. Trong bài viết này, tôi sẽ chỉ ra các mẹo ngẫu nhiên từ kinh nghiệm của bản thân, cách sử dụng seeding trong các trường hợp thực tế

Mẹo 1. Sử dụng updateOrCreate[] để tránh double-seeding

Hãy tưởng tượng mã trình tạo này và tưởng tượng nếu vì lý do nào đó, trình tạo này sẽ được khởi chạy nhiều lần

public function run[]
{
    $items = [
        ['id' => 1, 'title' => 'Administrator'],
        ['id' => 2, 'title' => 'Simple user'],
    ];

    foreach [$items as $item] {
        Role::create[$item];
    }
}

Lần thử thứ hai để chạy seeder có thể sẽ thất bại do ID xung đột. Trong trường hợp khác, nếu bạn không chỉ định ID, thì bạn có thể có quá nhiều dữ liệu trong bảng, với các mục lặp lại. Để tránh điều đó, hãy làm điều này

foreach [$items as $item] {
    Role::updateOrCreate[['id' => $item['id']], $item];
}

Một số chi tiết khác trong bài viết khác của tôi

Mẹo 2. Chỉ chạy một lớp Seeder

Cách đây một thời gian, tôi khá ngạc nhiên khi có nhiều người không biết rằng bạn có thể chỉ định lớp seeder khi chạy php artisan db. hạt giống

php artisan db:seed

Lệnh trên sẽ khởi chạy mọi thứ được liệt kê trong DatabaseSeeder. tập tin php

Nhưng bạn có thể giới hạn việc khởi chạy cho một máy gieo hạt chính xác

php artisan db:seed --class=UsersTableSeeder

Mẹo 3. Chạy lớp Seeder từ Migration

Khá thường xuyên, bạn cần tạo một bảng DB mới và ngay lập tức tạo một số dữ liệu cho nó. Nhưng trong môi trường sản xuất, bạn không thể chạy "artisan db. seed", đặc biệt nếu bạn có thiết lập triển khai tự động chỉ liên quan đến lệnh "artisan migration"

Mẹo nhỏ là khởi chạy một seeder cụ thể từ chính tệp di chuyển

public function up[]
{
    Schema::create['themes', function [Blueprint $table] {
        $table->increments['id'];
        $table->text['name'];
    }];

    Artisan::call['db:seed', [
        '--class' => ThemesTableSeeder::class
    ]];
}

Mẹo 4. Nhà máy gieo hạt có mối quan hệ. Sử dụng Nhà máy của Cha mẹ

Nếu bạn sử dụng Nhà máy cho hạt giống của mình, làm thế nào để bạn thiết lập mối quan hệ giữa hai mô hình?

Đây là cách cơ sở dữ liệu/nhà máy/CompanyFactory. php có thể trông giống như

________số 8_______

Xem cách điền vào trường company_id?

Ngoài ra còn có một cách khác, có lẽ ít phổ biến hơn - đọc về nó trong một bài báo khác của tôi

Mẹo 5. DatabaseSeeder cho địa phương và sản xuất

Đôi khi bạn chỉ cần tạo một số dữ liệu trong môi trường cục bộ của mình chứ không phải trong sản xuất. Hoặc, sử dụng các tệp seeder khác nhau cho các môi trường khác nhau

Không chắc đó có phải là cách thanh lịch nhất hay không, nhưng đây là cách trước đây tôi đã đạt được các cách gieo hạt khác nhau cho môi trường sản xuất và địa phương

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run[]
    {
        if [app[]->environment[] == 'production'] {
            $this->call[ThemesTableSeeder::class];
            $this->call[LanguagesTableSeeder::class];
        } else {
            $this->call[UsersTableSeeder::class];
            $this->call[ModulesTableSeeder::class];
            $this->call[ThemesTableSeeder::class];
            $this->call[LanguagesTableSeeder::class];
        }
    }
}

Mẹo 6. Sử dụng iSeed để tạo Seeder từ cơ sở dữ liệu

Mẹo cuối cùng thực sự là một công cụ mà tôi đã sử dụng khá nhiều lần, nó được gọi là iSeed Generator

Đây là video của tôi về nó

Đó là nó. Mẹo "chung" cuối cùng là tạo các seeder của bạn theo cách mà trên môi trường cục bộ/dàn dựng của bạn, bạn có thể chạy "artisan migration. tươi --seed" nhiều lần một cách an toàn mà không làm mất bất kỳ dữ liệu quan trọng nào, nhưng trên môi trường sản xuất, bạn cần chạy "artisan db. seed" chỉ một lần và sau đó quên đi seeder. Nếu bạn cần chạy một số hạt giống trong quá trình sản xuất, hãy đưa nó vào quá trình di chuyển, xem Mẹo 3

php artisan db là gì. hạt giống?

Db. lệnh seed được dùng để tự động thêm bản ghi vào cơ sở dữ liệu bằng cách sử dụng lớp Seeder [ Illuminate\Database\Seeder ] để tạo hoặc cung cấp bản ghi . db. hạt giống xác định ba tùy chọn. lớp, cơ sở dữ liệu và lực lượng. Tùy chọn lớp có thể được sử dụng để chỉ định rằng nên sử dụng một lớp Seeder cụ thể.

php artisan có xóa dữ liệu không?

Làm mới di chuyển sẽ xóa tất cả các bảng, sau đó cài đặt lại tất cả các lần di chuyển . Vì vậy, mọi dữ liệu sẽ bị mất. Nếu bạn muốn thêm các lần di chuyển khác vào cơ sở dữ liệu hiện tại của mình - bạn chỉ nên chạy php artisan migration - sẽ chỉ chạy các lần di chuyển chưa xảy ra.

Làm cách nào để cập nhật seeder trong Laravel?

Sử dụng updateOrCreate[] để chạy Seed bất cứ lúc nào .
Tạo một tệp di chuyển cho điều đó với Vai trò. tìm[1]->cập nhật[];
Tạo một tệp hạt giống cụ thể và chạy php artisan db. hạt giống --class=NewRoleSeeder
Sửa đổi seeder hiện có và chạy lại php artisan db. hạt giống cho toàn bộ ứng dụng

Laravel seeder hoạt động như thế nào?

Laravel bao gồm khả năng khởi tạo cơ sở dữ liệu của bạn bằng dữ liệu bằng cách sử dụng các lớp khởi tạo . Tất cả các lớp hạt giống được lưu trữ trong thư mục cơ sở dữ liệu/người gieo hạt. Theo mặc định, một lớp DatabaseSeeder được xác định cho bạn. Từ lớp này, bạn có thể sử dụng phương thức gọi để chạy các lớp hạt giống khác, cho phép bạn kiểm soát thứ tự hạt giống.

Chủ Đề