2017-03-27 64 views
0

我已經在我的控制器添加類別名稱,而不是在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版

回答

1

你不需要$的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] 
    ); 
}); 
+0

感謝您的答案。那就是我要問的 - 如果名字不是唯一的,會發生什麼?通常會..但是有可能有同名的類別或子類別。 – VLS

+0

其實,在你的查詢中,我不確定它是否真的會成爲問題,因爲我不知道你的查詢的結果是什麼。你想顯示一個類別的子類別? – piscator

+0

在這個函數中還有另一個小的查詢,這與此無關,我已經刪除它來縮短一些問題。底線是我需要通過ID。是的,我展示了僅分配給此類別的類別和產品的子類別。 – VLS

相關問題