Laravel多态关系和许多ifs

时间:2017-07-09 07:47:33

标签: php laravel if-statement polymorphism

我还在学习Laravel,我仍然有一件事情我会坚持下去。在我的数据库中的transactions表中,我有两个用于多态关系的字段:

paymentable_id
paymentable_type

所以我可以在交易中添加Payment PlanSavings Plan或任何其他模型。

我这样做的方法是,通过在我的视图中使用几个单选按钮,选择必须添加的模型。进行选择后,会出现一个下拉列表,选择必须添加哪一个,例如,这将提交Payment Plan ID

在我的控制器中,我正在检查已提交的内容,然后将该附件附加到我的交易中:

if ($request['plan_id'])
{
    $plan = Plan::find($request['plan_id']);

    $plan->transactions()->save($transaction);
}

if ($request['saving_id'])
{
    $saving = Saving::find($request['saving_id']);

    $saving->transactions()->save($transaction);
}

// And a couple more, for Fixed Payments, Subscriptions, Budgets, and so on.

这就是我被困住的地方,我不知道实现这一目标的正确方法,或者即使多态是这样做的方式(我很确定它是这样)。在我的控制器中或其他任何地方喜欢5 + if's,这对我来说似乎不对。

1 个答案:

答案 0 :(得分:1)

一个简单的解决方案,虽然可能不切实际,但是要更改表单以传递两个值:'plan_type''plan_id'。然后在您的控制器中,检查请求的计划类型并遵循其模型'

$planType = "App\\" . $request['plan_type'];

$plan = $planType::find($request['plan_id']);

$plan->transactions()->save($transaction);

当然,您需要验证数据,并检查提交的类型是否存在。