在州内创建工厂,并在Laravel中获取自己的id
我正在开发一个Laravel应用程序。我在我的应用程序中使用工厂,特别是用于单元测试和设置工厂,但是我在与state一起设置工厂时遇到了问题。以下是我的数据库结构: 投标 然后我有另一个模型,如下所示: 比德洛格 数据库结构非常简单。问题是BidLog只会在Bid的事件侦听器中创建。只有当投标存在时,它才存在。这基本上是投标的状态。所以,当我为BidLog建立工厂时,我建立了类似这样的东西在州内创建工厂,并在Laravel中获取自己的id,laravel,factory,Laravel,Factory,我正在开发一个Laravel应用程序。我在我的应用程序中使用工厂,特别是用于单元测试和设置工厂,但是我在与state一起设置工厂时遇到了问题。以下是我的数据库结构: 投标 然后我有另一个模型,如下所示: 比德洛格 数据库结构非常简单。问题是BidLog只会在Bid的事件侦听器中创建。只有当投标存在时,它才存在。这基本上是投标的状态。所以,当我为BidLog建立工厂时,我建立了类似这样的东西 $factory->state(Bid::class, 'open', function ($fak
$factory->state(Bid::class, 'open', function ($faker) {
$bidLog = factory(BidLog::class)->create([
'bid_status' => 'open',
'bid_id' => //how can I get the bid id here?
]);
return [
'updated_at' => now()
];
});
BidLogFactory.php
$factory->define(BidLog::class, function (Faker $faker) {
$bid = Bid::inRandomOrder()->first();
return [
'bid_id' => $bid->id,
'bid_status' => 'open'//Bid factory will override this value
];
});
然后我像这样设置工厂的状态
$factory->state(Bid::class, 'open', function ($faker) {
$bidLog = factory(BidLog::class)->create([
'bid_status' => 'open',
'bid_id' => //how can I get the bid id here?
]);
return [
'updated_at' => now()
];
});
问题是如何在状态回调函数中获取Bid id?或者我如何设置它
使用回调函数传递(闭包)
像那样使用
$factory->state(Bid::class, 'open', function ($faker) {
$bidLog = factory(BidLog::class)->create([
'bid_status' => 'open',
'bid_id' => function(){
return Bid::inRandomOrder()->first()->id;
}
]);
return [
'updated_at' => now()
];
});
使用这里的afterCreatingState
方法(我想)了解更多信息
没有人。事实并非如此。它会给我随机的出价id。我想要的是这样的$this->id@WaiYanHein我更新了我的答案,我认为这将对你有用
$factory->state(Bid::class, 'open', function ($faker) {
$bidLog = factory(BidLog::class)->create([
'bid_status' => 'open',
'bid_id' => function(){
return Bid::inRandomOrder()->first()->id;
}
]);
return [
'updated_at' => now()
];
});
$factory->state(Bid::class, 'open', [])
->afterCreatingState(Bid::class,'open',function($bid,$faker) {
factory(BidLog::class)->create([
'bid_status' => 'open',
'bid_id' => $bid->id
]);
});