我正在开发Laravel应用程序。我现在在我的应用程序中使用工厂,尤其是用于单元测试和设置工厂。但是现在我在建立州工厂方面遇到了问题。请在下面查看我的数据库结构。
id, amount, created_at, updated_at, user_id
然后我有另一个模型,如下。
id, bid_status, created_at, updated_at, bid_id
数据库结构非常简单。问题是BidLog将仅在Bid的事件监听器中创建。仅在投标存在时才存在。基本上是出价状态。因此,当我为BidLog设置工厂时,就设置了类似的内容。
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
];
});
然后我像这样设置BidFactory的状态。
$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?或者如何设置?
答案 0 :(得分:1)
使用回调函数传递(关闭)
那样使用
$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
方法进入see
$factory->state(Bid::class, 'open', [])
->afterCreatingState(Bid::class,'open',function($bid,$faker) {
factory(BidLog::class)->create([
'bid_status' => 'open',
'bid_id' => $bid->id
]);
});