2014-10-16 1 views
1

현재 기본 키 대신 슬러그가 포함 된 URI가 있습니다. 그런 다음 해당 문자열을 검색하여 해당 항목을 찾습니다. /show/big-bang-theory/episode/01Laravel을 사용하여 MySQL에서 항목 ID를 slug에 추가하거나 slug로 찾으십시오.

내가 다음 할 제안 laravel에서

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

그러나 거기에 여러 사용자를 통해 다음 해당 쇼를 반환 :

예 (그들은 거의 고유 그래서 그들은 TV 쇼 이름입니다) :

/show/big-bang-theory-123/episode/01 여기서 123은 쇼의 아이템 ID입니다. 그럼 난 간단하게 할 수 있습니다 :

return Show::Find(123); 

질문은,이 두 가지 사이에 두드러진 영향이며 앞으로 발생할 수있는 문제점이 있습니까? 어쩌면 다른 더 똑똑한 방법으로 URI에 굼벵이를 넣을 수 있습니까?

답변

0

사실 어떻게 할 것인가는 당신에게 달려 있습니다. 한 테이블의 데이터를 항상 가지고있을 계획이라면 URL /show/big-bang-theory에 슬러그 만 사용하면 알 수 있듯이 찾을 수있을 것입니다.

그러나 다른 테이블의 기사도 사용하려면 많은 테이블에서 검색을 원하지 않기 때문에 고유 한 부분을 추가해야합니다 (예 : /otherurls/big-bang-theory).

정말 여러분에게 달렸습니다. URL에 필요하지 않은 것을 포함하지 않기를 바랍니다. id이 필요하지 않으면 사용하지 않습니다.

+0

그래도 ID를 검색하지 않는 것이 현명한 처벌입니까? – Ortixx

+1

숫자를 찾는 것이 더 빠를 것입니다. 그러나 'slug' 열에 인덱스를 넣으면 (물론 고유하게 만들면), 수천 개의 행에 대해서도 어떤 차이도 보이지 않을 것입니다 –

0

내가 블로그 게시물이 처리 한 한 빠른 방법은 ID 슬러그하기 전에 경로에

예입니다 : /show/123/big-bang-theory/episode/01

당신이 검색 엔진 최적화에 대한 원하는대로 당신은 또한 슬러그에 키워드를 넣을 수 있습니다이 방법 라우팅을 엉망으로 만들거나 모든 가능한 슬러그 경로에 대해 일대 다 테이블을 가지지 않아도됩니다.

  • /쇼/124/의사 - 누가/에피소드/01
  • /쇼/124/닥터 (2005)/에피소드/01
  • /쇼/124/DrWho/에피소드/01

그러나 쿼리를 최적화하려는 경우 인덱싱은 효율성이 int/string을 처리하는 부분입니다. 결코 나쁜 코드를 작성하려고하지 마십시오.하지만 동시에 응용 프로그램에서 요구할 때까지 효율성을 최적화하지 마십시오. 명확한 성능 문제가없는 한 클럭 사이클이나 디스크 IO보다 시간이 더 많이 소요됩니다.

관련 문제