将多个继承的模型绑定到同一条路线laravel

时间:2019-01-18 15:59:14

标签: php laravel routes

我有3个模型,它们都继承了抽象的Plan模型,BehaviourPlanAffirmationPlanProfilePlan

是否可以通过同一条路线提供所有服务?这是我到目前为止的内容,但是由于Plan是抽象的,因此会抛出Target [App\Plan] is not instantiable.

Route::prefix('plans')->group(function () {
    Route::get('/{plan}', function (\App\Plan $plan) {
        dd($plan);
    });
});

1 个答案:

答案 0 :(得分:0)

我已经解决了这一问题,方法是更改​​每个计划的子项以其类型为前缀,然后仅运行if语句以在控制器中检索计划,例如:

public function show(Student $student, string $plan_id)
    {
        $plan = null;
        if(starts_with($plan_id, "behaviour"))
        {
            $plan = BehaviourPlan::where('slug', $plan_id)->first();
        }
        else if(starts_with($plan_id, "affirmation"))
        {
            $plan = AffirmationPlan::where('slug', $plan_id)->first();
        }
        else if(starts_with($plan_id, "profile"))
        {
            $plan = ProfilePlan::where('slug', $plan_id)->first();
        }

        if ($plan == null)
            return abort('404');

        dd($plan);
    }

虽然似乎有些粗糙,但我仍在寻找一种更整洁的方法来解决此问题