2013-07-29 6 views
1

조건 검색에 문제가 플러그인과 나는 같은 간단한 쿼리를 사용하여 좋은 결과를 얻고있다 :CakePHP의 태그는 내가 CakePHP의 태그의 플러그인을 즐기고했습니다

$this->Upload->find('all');

이 반환 내 업로드 모두와 관련 태그. 훌륭한.

그러나, 나는 시도하고 태그를 통해 검색하는 경우 : 그것은 "태그"열을 찾을 수 없다는 불평,

$this->Upload->find('all', array('conditions' => array('Tag.name' => $tagname)));

그것은 실패합니다. 오류 : 수동 검색은 동일한 오류와 함께 실패 SQLSTATE [42S22] : 열을 찾을 수 없습니다 : 내가 잘못 여기서 뭘하는지 '절'

$tag = $this->Upload->find('all', array('joins' => array(
     array( 
      'table' => 'tagged', 
      'alias' => 'Tagged', 
      'type' => 'left', 
      'foreignKey' => false, 
      'conditions' => array('Tagged.foreign_key' => 'Upload.id'), 
     array( 
      'table' => 'tags', 
      'alias' => 'Tag', 
      'type' => 'left', 
      'foreignKey' => false, 
      'conditions' => array('Tag.id' => 'Tagged.tag_id') 
      ) 
     ), 
     'conditions' => array('Tag.name' => $tagname) 

    )));  

어떤 생각에서 'Tag.name'1054 알 수없는 열을? 태그 플러그인이이를위한 것이 아닌가? 태그를 기준으로 업로드를 조건부 검색하는 방법을 알고 싶습니다.

표는 태그 플러그인에 대해 생성 :

mysql> show columns from tagged 
    -> ; 
+--------------+--------------+------+-----+---------+-------+ 
| Field  | Type   | Null | Key | Default | Extra | 
+--------------+--------------+------+-----+---------+-------+ 
| id   | varchar(36) | NO | PRI | NULL |  | 
| foreign_key | varchar(36) | NO |  | NULL |  | 
| tag_id  | varchar(36) | NO |  | NULL |  | 
| model  | varchar(255) | NO | MUL | NULL |  | 
| language  | varchar(6) | YES | MUL | NULL |  | 
| times_tagged | int(11)  | NO |  | 1  |  | 
| created  | datetime  | YES |  | NULL |  | 
| modified  | datetime  | YES |  | NULL |  | 
+--------------+--------------+------+-----+---------+-------+ 

태그 테이블 : 당신은 아마 수동으로 조건을 설정을 시도 할 수

mysql> show columns from tags; 
+------------+-------------+------+-----+---------+-------+ 
| Field  | Type  | Null | Key | Default | Extra | 
+------------+-------------+------+-----+---------+-------+ 
| id   | varchar(36) | NO | PRI | NULL |  | 
| identifier | varchar(30) | YES | MUL | NULL |  | 
| name  | varchar(30) | NO |  | NULL |  | 
| keyname | varchar(30) | NO |  | NULL |  | 
| weight  | int(2)  | NO |  | 0  |  | 
| created | datetime | YES |  | NULL |  | 
| modified | datetime | YES |  | NULL |  | 
+------------+-------------+------+-----+---------+-------+ 
+0

테이블을 보여줄 수 있습니까? – Perry

+0

표 추가 – baordog

답변

0

합니다. 나는 태그 플러그인이 어떻게 작동하는지 모르겠지만, 업로드 모델이 태그에 hasMany의 관계가있는 경우,이 같은 아마 작동합니다 :

$this->Upload->hasMany['Tag']['conditions']['name'] = $tagname; 
$this->Upload->hasMany['Tag']['conditions']['model'] = 'Upload'; 
$this->Upload->hasMany['Tag']['conditions']['foriegn_id'] = $this->Upload->id; 
$this->Upload->find('all'); 
$this->Upload->Tag->find('all', array('conditions' => array('Tag.name' => $tagname))); 같은

또는 무언가가 있는지 확실하지 않습니다 (더 좋을 수도 하나는 작동합니다).

+0

두 번째 태그 만 반환됩니다. 나는 그것이 나에게 관련 꼬리표의 업로드를 줄 필요가있다 "나에게 개 '밥'과 함께 모든 업로드를 줘." 조인 테이블이 있기 때문에 업로드에 HABTM 관계를 사용하고 있으며 hasMany 관계에 대한 조인 테이블을 처리하는 방법을 보지 못합니다. HABTM 때문에 foreign_id 열이 없으므로 첫 번째 예제를 시도 할 수 없었습니다. – baordog

+0

hasMany 대신 HABTM 관계를 변경하는 방법은 Tag 대신 Tagged 모델을 사용하는 방법이 있습니다. 예를 들어'$ this-> Upload-> hasAndBelongsToMany [ 'Tagged'] [ 'conditions'] [ 'Tag'] [ 'name'] = $ tagname;'... 작동하는지 확실하지 않습니다. 내 대답으로 너의 질문을 너무 빨리 읽은 것 같아. 미안해, 네가 시간 낭비했다면. – SharkofMirkwood

+0

위대한 생각이지만 '오버로드 된 속성의 간접 수정 Upload :: $ hadAndBelondsToMany는 아무런 효과가 없습니다 [APP/Controller/SearchesController.php, line 620]'- 오버로드는 HABTM 랜드에 포함되지 않습니다. 걱정하지 마라. 너는 내 시간을 낭비하지 않았다. – baordog