我正在 Laravel 中开发一个应用程序。 问题是,当我尝试恢复一个模型及其所有相关模型时,其中一些模型无法恢复。我想这是因为它们是多层次的深层相关的。 这是恢复项目的代码:
$contract = Contract::withTrashed()->findOrFail($id);
$contract->restore();
$contract->load(['acceptanceActs' => function ($query) {
$query->withTrashed()->with('invoice');
}]);
foreach ($contract->acceptanceActs as $act) {
$act->restore();
if ($act->invoice) {
$act->invoice->restore();
}
}
return response()->json();
所以问题是相关的发票到验收行为没有恢复,但是合同和验收行为却恢复了。
这是我的模型: 合约:
/**
* @return BelongsTo
*/
public function client(): BelongsTo
{
return $this->belongsTo(Client::class);
}
/**
* @return HasMany
*/
public function acceptanceActs(): HasMany
{
return $this->hasMany(AcceptanceAct::class);
}
验收法案:
/**
* @return BelongsTo
*/
public function client(): BelongsTo
{
return $this->belongsTo(Client::class);
}
/**
* @return HasOne
*/
public function invoice(): HasOne
{
return $this->hasOne(Invoice::class);
}
/**
* @return BelongsTo
*/
public function contract(): BelongsTo
{
return $this->belongsTo(Contract::class);
}
发票:
/**
* @return BelongsTo
*/
public function client(): BelongsTo
{
return $this->belongsTo(Client::class);
}
/**
* @return HasMany
*/
public function items(): HasMany
{
return $this->hasMany(InvoiceItem::class);
}
/**
* @return BelongsTo
*/
public function acceptanceAct(): BelongsTo
{
return $this->belongsTo(AcceptanceAct::class);
}
它们都使用软删除。
A 会像这样编辑和简化你的代码,它应该可以正常工作。
$contract = Contract::withTrashed()->findOrFail($id);
$contract->restore();
$contract->acceptanceActs()
->withTrashed()
->get()
->each(function (AcceptanceAct $acceptanceAct) {
$acceptanceAct->restore();
$acceptanceAct->invoice()->withTrashed()->first()?->restore();
});
return response()->json();