具有关系数据的模型事件

时间:2019-11-06 17:05:33

标签: php laravel eloquent laravel-6

我有一个Expense模型,您可以在其中选择费用使用的货币。费用与Project模型有关,用户也可以为项目设置特定的币种。例如,即使您以欧元为项目开具发票,也可以用美元支付费用。

因此,我想在保存模型时将费用转换为“本地货币”(项目货币)。

但是,我体验到在尚未实际保存的模型上使用saving(甚至是saved)事件时,从关系中获取货币将不起作用。

$project_currency = $model->project->currency;

这将返回ErrorException: Trying to get property 'currency' of non-object

ExpenseController看起来像这样:

public function store(StoreExpenseRequest $request, Project $project)
{
    $validated = $request->validated();
    $expense = Expense::create( $validated );
    $project->expenses()->save( $expense );
    flash('Expense Saved')->success();
    return redirect()->route('project.show', $project->id);
}

1 个答案:

答案 0 :(得分:0)

我刚找到答案。我在store上将ExpenseController方法编辑为以下内容:

public function store(StoreExpenseRequest $request, Project $project)
{
    $validated = $request->validated();
    $expense = new Expense( $validated );
    $project->expenses()->save( $expense );
    flash('Expense Saved')->success();
    return redirect()->route('project.show', $project->id);
}

然后saving事件起作用了。