为什么在Laravel的控制器中没有正确重定向(如果不是)?

时间:2018-10-15 13:20:04

标签: php mysql laravel-5

我正在使用laravel 5.6。在我的应用程序中,表名称为车辆,如下所示,

id  name   model    year  categoryname  user_id
1   toyota  121     2001      car           1
2   nissan  sunney  1998      car           2
3   toyota  liteace 2000      van           5
4   isuzu   elf     2005      truck         9
5   bmw     520d    2010      car           7

现在,我需要根据车辆表的类别名称重定向每个车辆编辑表单。我有像这样的控制器编辑功能吗?

public function edit($id)
{
    if (Vehicle::where('categoryname', 'Car')) {

        $vehicles = Vehicle::find($id);
        $town_list = Town::with('district.province')->groupBy('provincename')->get();
        $model_list = DB::table('modols')

            ->groupBy('categoryname')
            ->get();
        return view('vehicles.caredit')->withVehicles($vehicles)->withTown_list($town_list)->withModel_list($model_list);
    }
    else if (Vehicle::where('categoryname', 'Van')){
        $vehicles = Vehicle::find($id);


        $town_list = Town::with('district.province')->groupBy('provincename')->get();
        $model_list = DB::table('modols')

            ->groupBy('categoryname')
            ->get();
        returnview('vehicles.vanedit')->withVehicles($vehicles)->withTown_list($town_list)->withModel_list($model_list);
    }
}

但是当我重定向不同的类别名称值(例如car和van)时,它们始终都重定向到caredit.blade.php。那我该如何解决这个问题呢?

2 个答案:

答案 0 :(得分:2)

您只是获取查询构建器对象,而不是限制搜索。但是,我猜测您想根据特定模型的类别名称切换视图。在这种情况下,您要检查模型的类别名称值:

public function edit($id)
{
    $vehicles = Vehicle::find($id);
    $town_list = Town::with('district.province')->groupBy('provincename')->get();
    $model_list = DB::table('modols')

        ->groupBy('categoryname')
        ->get();
    if ($vehicles->categoryname == 'Car') {
        return view('vehicles.caredit')->withVehicles($vehicles)->withTown_list($town_list)->withModel_list($model_list);
    }
    else if ($vehicles->categoryname == 'Van'){
        return view('vehicles.vanedit')->withVehicles($vehicles)->withTown_list($town_list)->withModel_list($model_list);
    }
}

如果模板的格式始终使用相同的格式,则还可以使用以下内容减少if-else语句的数量:

public function edit($id)
{
    $vehicles = Vehicle::find($id);
    $town_list = Town::with('district.province')
                 ->groupBy('provincename')
                 ->get();
    $model_list = DB::table('modols')
                  ->groupBy('categoryname')
                  ->get();

    $categoryName = strtolower($vehicles->categoryname);
    return view('vehicles.'.$categoryName.'edit')
           ->withVehicles($vehicles)
           ->withTown_list($town_list)
           ->withModel_list($model_list);

答案 1 :(得分:0)

更改

Vehicle::where('categoryname', 'Car')

Vehicle::where('categoryname', 'Car')->get();

您没有访问代码中的实际结果集,需要调用->get()函数。

一种好的做法是获取结果集,并根据重定向来检查结果集是Van还是Car