【问题标题】:why did not properly redirect if else in controller in Laravel?为什么在 Laravel 的控制器中没有正确重定向 if else ?
【发布时间】:2023-03-25 20:28:02
【问题描述】:

我正在使用 laravel 5.6。在我的应用程序中,我有这样的表名 vehicles

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。那么我该如何解决这个问题呢?

【问题讨论】:

  • 您只是获得了查询构建器,因为您没有传递 get 选项(->get()->first() 等)。如果您在表中同时拥有carvan,您可能还会一直点击car,因此您需要进一步限制它。
  • @aynber 我该怎么做?

标签: php mysql laravel-5


【解决方案1】:

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

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);

【讨论】:

    【解决方案2】:

    改变

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

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

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

    一个好的做法是获取结果集并检查它是 Van 还是 Car 并基于该重定向。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-25
      相关资源
      最近更新 更多