2014-10-16 32 views
1

我目前有一個URI,其中包含一個slug而不是主鍵。然後我通過搜索該字符串找到相應的項目。 (他們是電視節目的名稱,以便它們幾乎是唯一的)將item id追加到slug或使用Laravel在MySQL中用slug找到

例子:/show/big-bang-theory/episode/01

我再

public function getBySlug($slug) 
{ 
    return Show::where('slug', '=', $slug)->firstOrFail(); 
} 

但是有幾個用戶通過在laravel建議做返回相應呈現以下:

/show/big-bang-theory-123/episode/01其中123是節目的項目標識。然後,我可以簡單地做:

return Show::Find(123); 

的問題是,是否影響這兩者之間明顯,在那裏我會遇到任何將來的問題?有沒有其他更聰明的方法可以在URI中使用slug?

回答

0

其實這取決於你如何做到這一點。如果您打算始終從一張桌上獲取數據,則可以在網址/show/big-bang-theory中僅使用slu and,正如您所看到的,它足以找到它。

但是,如果您想使用其他表格中的文章,則需要爲它們添加一些獨特的部分(例如/otherurls/big-bang-theory),因爲您不想在許多表格中進行搜索。

所以這真的取決於你,我更喜歡不包括我不需要的URL的東西。如果我不需要id,我不會使用它。

+0

好的,但沒有在ID上搜索罰款表現明智嗎? – Ortixx 2014-10-16 20:41:16

+1

尋找數字會更快,但如果你把索引放在'slug'列(當然使它獨一無二),即使對於數千行也不會看到任何差異 – 2014-10-16 20:44:56

0

,我已經處理了這個對博客文章的一個快速方法是將路由塞前的ID

例:/show/123/big-bang-theory/episode/01

這種方式,你也可以把任何關鍵字段塞,只要你想搜索引擎優化目的不會搞亂路由,或者不得不爲所有可能的slug路由設置一個到多個表。

  • /顯示/ 124 /醫生誰/集/ 01
  • /顯示/ 124 /醫生是誰(2005)/集/ 01
  • /顯示/ 124/DrWho /插曲/ 01

但是,如果您只是想優化查詢,索引是效率處理int/string的地方。千萬不要試圖寫出不好的代碼,但同時不要爲了提高效率而進行優化,直到應用程序需要它爲止。除非有明確的性能問題,否則你的時間比時鐘週期或磁盤IO更有價值。

相關問題