2016-08-02 4 views
0

저는 Yii에 설명서 센터를 작성하고 있습니다. 나는 하나의 섹션에서 다른 모든 작업을하고 있는데, 관련 기사를 가져오고 싶습니다. 참고 : 나는 용어를 사용하여 관계형 데이터베이스와 관련이있는 것은 아닙니다.Yii 공통 태그가있는 모든 레코드가 반환됩니다.

그래서 기사보기에있을 때 공통 태그가있는 다른 기사를 나열하는 기사 아래의 표를 가져올 수 있기를 원합니다. 기사 데이터베이스의 각 레코드에는 쉼표로 구분 된 값이있는 열이 있습니다.

id | title | tags 
1 | new | new,article,text 
2 | new2 | new,alternate 
3 | new3 | new,test,text 

그래서 내가 예를 들어 태그 여기 new

를 포함하는 레코드 만에 모델을 출력하는 기능으로 $model->tags를 내 기록을 통과해야 즉 것은 내가 지금까지 가지고 무엇을 내가 비록 이것을 어떻게 작동시키는 지 생각조차 할 수 없다.

public function getRelatedArticles($category) { 
    $search_array = explode(",", $category) 
    $criteria = new CDbCriteria(); 

    $criteria->compare('tags', $category); 

    return DocsArticles::model()->findAll($criteria); 
} 

이전에 수행했거나 수행 방법을 알고있는 사람이 있습니까?

답변

1

태그 필드는 각 태그가 혼수로 구분 된 문자열을 사용한다고 가정합니다.

당신은 CDbCriteriaaddCondition 방법을 사용할 수 있습니다. 검색 조건에 관해서는, 나는 문자열 을 위해 하나를 사용하는 새로운하거나 새로운 , 여기

은 예입니다

public function getRelatedArticles($category) { 
    $criteria = new CDbCriteria(); 
    $criteria->addCondition("tags LIKE '%,{$category}%' OR tags LIKE '%{$category},%'"); 
    return DocsArticles::model()->findAll($criteria); 
} 

하지만 약간에 문제가 태그을 경우,이 함께있다 입력란에는 '새 태그'와 같은 태그 값 하나만 있으면 작동하지 않습니다. 이를 위해 데이터베이스에 사용자 정의 함수를 작성해야 할 수 있습니다.

희망 도움말.

편집 :

데이터베이스의 문자열이 동일하게 유지, 아무것도 변경할 수 없습니다. 오해해서 미안해.

+0

고마워요. 제가 이걸 가지고 일할 수 있는지 찾아 보겠습니다. – gsusonline

+0

도와 드릴 수 있으면 다행입니다. –

+0

내 태그 열의 값이 바로 "new, test, five "당신은 그들이 문자열 즉,"새로운 ","테스트 ","다섯 "이어야한다고 제안하고 있습니까? – gsusonline

0

답변을 주셔서 감사합니다 zmiftah, 그것을 구현하는 데 시간이 좀 걸렸지 만 귀하의 답변은 90 %였습니다. 대답의 문제는 $ category 변수에 문자열 "new, test, five"가 포함되어 있고 SQL 와일드 카드에 래핑되어야하는 항목이 개별 배열 항목이어야합니다.

내 코드는 다음과 같습니다.

public function getRelatedArticles($category,$id) { 
     $array = explode(',',$category); 
     $tagItems = null; 
     foreach($array as $tag){ 
      $tagItems[0] = "id !={$id} AND (tags LIKE '%{$tag}%'"; 
      $tagItems[] = "OR tags LIKE '%{$tag}%'"; 
     } 
     $arrayReturn = implode(" ",$tagItems); 
     $criteria = new CDbCriteria(); 
     $criteria->addCondition($arrayReturn . ")"); 
     return DocsArticles::model()->findAll($criteria); 
    } 

이 코드는 또한 반환 모델에서 기존 ID를 제거 같은 다른 몇 가지를하고있다, 그래서 난 그냥 같은 관련 읽은 기사를 당겨 아니에요. 당신의 도움을 주셔서 감사합니다.

+0

오신 것을 환영합니다. 늦어서 죄송합니다. –

관련 문제