Trong Laravel, việc tạo cơ sở dữ liệu thường được thực hiện thông qua các nhà máy mô hình. Vì vậy, bạn xác định một kế hoạch chi tiết cho mẫu của bạn sử dụng dữ liệu Faker, và nói bao nhiêu trường hợp bạn cần:Laravel - Mối quan hệ hạt giống
$factory->define(App\User::class, function (Faker\Generator $faker) {
return [
'name' => $faker->name,
'email' => $faker->email,
'password' => bcrypt(str_random(10)),
'remember_token' => str_random(10),
];
});
$user = factory(App\User::class, 50)->create();
Tuy nhiên, cho phép nói mô hình tài khoản của bạn có một mối quan hệ hasMany
với nhiều mô hình khác, giống như một mô hình Post
ví dụ:
Post:
id
name
body
user_id
Vì vậy, trong tình huống này, bạn muốn để gieo rắc bảng viết của bạn với thực tế người dùng đã được gieo mầm trong bảng người dùng của bạn. Đây dường như không được thảo luận một cách rõ ràng, nhưng tôi đã tìm ra sau đây trong các tài liệu Laravel:
$users = factory(App\User::class, 3)
->create()
->each(function($u) {
$u->posts()->save(factory(App\Post::class)->make());
});
Vì vậy, trong nhà máy tài khoản của bạn, bạn tạo X số bài viết cho mỗi tài khoản bạn tạo ra. Tuy nhiên, trong một ứng dụng lớn, nơi có thể 50 - 75 Mô hình chia sẻ mối quan hệ với Mô hình người dùng, Seed Seeder của bạn về cơ bản sẽ tạo ra toàn bộ cơ sở dữ liệu với tất cả các mối quan hệ của nó.
Câu hỏi của tôi là: Đây có phải là cách tốt nhất để xử lý việc này không? Điều duy nhất tôi có thể nghĩ đến là Seed the Users trước (không gieo giống bất kỳ mối quan hệ nào), và sau đó kéo người dùng ngẫu nhiên từ DB khi cần thiết trong khi bạn đang gieo giống các Models khác. Tuy nhiên, trong trường hợp chúng cần phải là duy nhất, bạn phải theo dõi những Người dùng nào đã được sử dụng. Ngoài ra, có vẻ như điều này sẽ thêm rất nhiều truy vấn bổ sung cho quá trình tạo hạt giống.
Cảm ơn bạn đã trả lời. Tôi đã thử những thứ như thế này. Tuy nhiên, nếu tôi muốn sử dụng cùng một nhóm Người dùng, giả sử, 20 mô hình khác, tôi cảm thấy rằng người gieo hạt của tôi bị lúng túng khá nhanh. Về cơ bản, tất cả logic hạt giống của tôi kết thúc xảy ra trong một tệp, bởi vì 'Người dùng' được liên kết với nhiều Mô hình khác. Nhưng có lẽ không có cách nào tốt hơn – djt