Laravel 增变器或创建事件

Laravel mutator or creating event

我有两个模型,CardExpense。两者都有一个 type 字段。每当我添加新的费用时,我都会在表格中有一个下拉菜单 select a Card。它们通过 belongsTo 关系相关。

问题是,我想自动将我的费用的 type 字段设置为与我的卡类型相同。我不想在我的费用表中有另一个 type 的下拉列表。此外,我想在我的费用控制器上的 store 方法中继续使用以下内容:

auth()->user()->expenses()->create($request->all());

我认为这应该可以通过在模型中使用一个修改器来实现,但我不完全确定如何处理这个问题。

所以简而言之,我需要的是,当创建一个新的Expense时,我需要从相关的Card中抓取type字段,然后插入到Expense type 字段。

我不想在我的控制器中做的是:

$expense = new Expense;
$expense->name = ... And so on

如果您想使用卡片模型中的 type,您可以这样做:

$card = Card::find(1);
$card->expenses()->create(array_merge($request->all(), ['type' => $card->type]));

但是如果您已经在 Card 模型中有一个并且 Expense 属于 Card,那么复制 type 并不是一个好主意。