添加类别名称,而不是在Laravel ID在URL 4.2
问题描述:
我已经在我的控制器添加类别名称,而不是在Laravel ID在URL 4.2
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' => '[email protected]']);
而且按钮
<a href="{{ URL::to('/category/' . $category->category_id) }}">View More</a>
目前以下功能该网址看起来像 - http://example.com/category/1其中1是ID。我想显示名称。
我可以轻松地做类似
Route::get('/category/{categoryId}/{name}', ['uses' => '[email protected]']);
按钮
<a href="{{ URL::to('/category/' . $category->category_id.'/'.$category->category_name) }}">View More</a>
但ID将仍然存在。我不能仅传递类别的名称,因为如果您检查上述查询,我需要该ID,因为我通过ID连接表。
任何想法我该怎么做?
Laravel 4.2版
答
你不需要$的categoryId的加入,因为你只在你那里语句中使用它。它有可能改变这一行:
->where('sc.category_id', '=', $categoryId)
到
->where('sc.category_name', '=', $categoryName)
你就不需要ID传递给showSubCats
了,而且可以利用$类别名称替换它。
这只适用于类别名称是唯一的。否则,你仍然需要该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(
'[email protected]', ['id' => $categoryId]
);
});
感谢您的答案。那就是我要问的 - 如果名字不是唯一的,会发生什么?通常会..但是有可能有同名的类别或子类别。 – VLS
其实,在你的查询中,我不确定它是否真的会成为问题,因为我不知道你的查询的结果是什么。你想显示一个类别的子类别? – piscator
在这个函数中还有另一个小的查询,这与此无关,我已经删除它来缩短一些问题。底线是我需要通过ID。是的,我展示了仅分配给此类别的类别和产品的子类别。 – VLS