在 Laravel 4.2 的 url 中添加类别名称而不是 id



>我的控制器中有以下功能

public function showSubCats($categoryId) {
   $subcats = DB::table('sub_category as sc')
    ->leftJoin('products as p', 'p.sub_cat_id', '=', 'sc.sub_cat_id')
    ->where('sc.category_id', '=', $categoryId)
    ->whereNotNull('p.sub_cat_id')
    ->select('p.*','sc.*', DB::raw('sc.sub_cat_id AS sub_cat_id'))
    ->groupBy('sc.sub_cat_id')
    ->get();
     return View::make('site.subcategory', [            
          'subcats' => $subcats
     ]); 
}

这在路由器中

Route::get('/category/{categoryId}', ['uses' => 'CategoryProducts@showSubCats']);

和按钮

<a href="{{ URL::to( '/category/' .  $category->category_id) }}">View More</a>

目前 url 看起来像 - http://example.com/category/1 其中 1 是 ID。我想改为显示名称。

我可以很容易地做出类似的东西

Route::get('/category/{categoryId}/{name}', ['uses' => 'CategoryProducts@showSubCats']);

按钮

<a href="{{ URL::to( '/category/' .  $category->category_id.'/'.$category->category_name) }}">View More</a>

但是 ID 仍然存在。我也不能只传递类别的名称,因为如果您检查上面的查询,我需要 ID,因为我通过 ID 连接表。

知道我该怎么做吗?

拉维尔4.2版

连接不需要$categoryId,因为您只在 where 语句中使用它。可以更改此行:

->where('sc.category_id', '=', $categoryId)

 ->where('sc.category_name', '=', $categoryName)

您不再需要将 id 传递给showSubCats,并且可以将其替换为 $categoryName。

这仅在类别名称唯一时才有效。否则,您仍然需要 id。

在这种情况下,您可以通过在路由中使用查询来隐藏 id,该查询根据名称获取子类别的 id。尝试这样的事情:

Route::get('/category/{categoryName}', function($categoryName) {
    $categoryId = DB::select('select id from sub_category where name = ?', array($categoryName))[0]->id;
    return redirect()->action(
         'CategoryProducts@showSubCat', ['id' => $categoryId]
    );
});

相关内容

  • 没有找到相关文章

最新更新