如何将参数从播种者传递给工厂?
How to pass arguments from seeders to factories?
我想将参数 ['site_id' => $site->id]
传递给 SiteMessage 工厂:
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\SiteMessage;
use App\Models\Site;
class SitesMessagesTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Site::chunk(200, function ($sites) {
foreach ($sites as $site) {
SiteMessage::factory()->count(rand(2, 6))->create(['site_id' => $site->id]);
}
});
}
}
如何在我的 SiteMessage 工厂中获取这些参数 class?
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
use App\Models\SiteMessage;
use App\Models\Site;
use App\Models\Integration;
class SiteMessageFactory extends Factory
{
protected $model = SiteMessage::class;
public function definition()
{
return [
**// Soliution: remove line below, it will be overridden automaticaly. \**
'site_id' => $arguments['site_id'], // Neet to use Id that I passed from seeder.
'integration_id'=> Integration::inRandomOrder()->first()->id,
'type' => rand(0,1) ? 'EMAIL' : 'SMS',
'title' => $this->faker->text($maxNbChars = 12),
'description' => $this->faker->sentence,
'message' => $this->faker->sentence,
'enabled' => 1,
'created_at' => now(),
'updated_at' => now(),
];
}
}
在较旧的 Laravel 出厂版本中,我可以像这样在回调中传递它们:
$factory->define(SiteMessage::class, function (Faker $faker, array $arguments = []) {
//
});
但不知道如何使用新的 Class 工厂实现它。任何帮助将不胜感激:)
如您在有关 persisting models with factories 的 laravel 文档中所见,当您键入:
SiteMessage::factory()->count(rand(2, 6))->create(['site_id' => $site->id]);
SiteMessage 工厂的 site_id 属性将被您指定的 $site->id
覆盖。
我想将参数 ['site_id' => $site->id]
传递给 SiteMessage 工厂:
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\SiteMessage;
use App\Models\Site;
class SitesMessagesTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Site::chunk(200, function ($sites) {
foreach ($sites as $site) {
SiteMessage::factory()->count(rand(2, 6))->create(['site_id' => $site->id]);
}
});
}
}
如何在我的 SiteMessage 工厂中获取这些参数 class?
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
use App\Models\SiteMessage;
use App\Models\Site;
use App\Models\Integration;
class SiteMessageFactory extends Factory
{
protected $model = SiteMessage::class;
public function definition()
{
return [
**// Soliution: remove line below, it will be overridden automaticaly. \**
'site_id' => $arguments['site_id'], // Neet to use Id that I passed from seeder.
'integration_id'=> Integration::inRandomOrder()->first()->id,
'type' => rand(0,1) ? 'EMAIL' : 'SMS',
'title' => $this->faker->text($maxNbChars = 12),
'description' => $this->faker->sentence,
'message' => $this->faker->sentence,
'enabled' => 1,
'created_at' => now(),
'updated_at' => now(),
];
}
}
在较旧的 Laravel 出厂版本中,我可以像这样在回调中传递它们:
$factory->define(SiteMessage::class, function (Faker $faker, array $arguments = []) {
//
});
但不知道如何使用新的 Class 工厂实现它。任何帮助将不胜感激:)
如您在有关 persisting models with factories 的 laravel 文档中所见,当您键入:
SiteMessage::factory()->count(rand(2, 6))->create(['site_id' => $site->id]);
SiteMessage 工厂的 site_id 属性将被您指定的 $site->id
覆盖。