我目前有一个URI,其中包含一个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
是节目的项目ID。然后我可以简单地做:
return Show::Find(123);
问题是,这两者之间的影响是否明显,我可能遇到的任何未来问题是什么?是否有其他更聪明的方法可以在URI中出现slu ??
答案 0 :(得分:0)
事实上,由你决定如何做到这一点。如果您计划始终从一个表中获取数据,则可以仅使用url /show/big-bang-theory
中的slug,如您所见,它就足以找到它。
但是,如果您还想使用其他表中的文章,则需要为它们添加一些独特的部分(例如/otherurls/big-bang-theory
),因为您不想在许多表中进行搜索。
所以这取决于你,我不想在网址中包含我不需要的东西。如果我不需要id
,我就不会使用它。
答案 1 :(得分:-1)
我为博客文章处理此问题的一种快捷方法是在slug
之前路由id例如:/show/123/big-bang-theory/episode/01
通过这种方式,您可以根据需要将任何关键字放在slug中,而不会弄乱路由,或者必须为所有可能的slug路由设置一对多表。
但是,如果您只是想优化查询,那么索引就是效率处理int / string的地方。永远不要试图编写错误的代码,但同时不要在应用程序需要之前优化效率。除非存在明显的性能问题,否则您的时间比时钟周期或磁盘IO更有价值。