我还在学习Laravel,我仍然有一件事情我会坚持下去。在我的数据库中的transactions
表中,我有两个用于多态关系的字段:
paymentable_id
paymentable_type
所以我可以在交易中添加Payment Plan
或Savings 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
,这对我来说似乎不对。
答案 0 :(得分:1)
一个简单的解决方案,虽然可能不切实际,但是要更改表单以传递两个值:'plan_type'
,'plan_id'
。然后在您的控制器中,检查请求的计划类型并遵循其模型'
$planType = "App\\" . $request['plan_type'];
$plan = $planType::find($request['plan_id']);
$plan->transactions()->save($transaction);
当然,您需要验证数据,并检查提交的类型是否存在。