在州内创建了一家工厂,并在拉维尔获得了自己的ID [英] Creating a factory inside the state and getting the id of itself in Laravel
本文介绍了在州内创建了一家工厂,并在拉维尔获得了自己的ID的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在开发一个Laravel应用程序。我在我的应用程序中使用工厂,专门用于单元测试和设置它们,但我在使用State设置工厂时遇到了问题。以下是我的数据库结构:
竞价
id, amount, created_at, updated_at, user_id
然后我有另一个模型,如下所示:
BidLog
id, bid_status, created_at, updated_at, bid_id
数据库结构非常简单。问题是,BidLog只会在竞标的事件侦听器中创建。只有在竞标存在的情况下,它才存在。这基本上是竞标的状态。因此,当我为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?或者我如何设置它?
推荐答案
使用回调函数(闭包)传递
那样使用
$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
]);
});
这篇关于在州内创建了一家工厂,并在拉维尔获得了自己的ID的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文