2013-11-09 3 views
1

Я хочу выполнить запрос со входом в Yii. Но произошло то, что я получил Внутренний сервер Ошибка. Я хочу выполнить запрос поиска элементов по его группе тегов.Yii framework- CDbCriteria using joins

Это вопрос, который я хочу, чтобы выполнить с помощью Yii:

select i.id as id, i.title as title, i.content as content from tbl_tags t 
    join tbl_items i on t.item_id = i.id 
    where t.tag_group_id = (value) and i.item_id = (value) 
    group by t.ref_id; 

И это, как я сделал это в Yii с помощью CDbCriteria:

 public function getItemsListByTagGroup(. . .){ 

      $criteria = new CDbCriteria; 
      $criteria->select = 'i.id as id, i.title as title, i.content as content i.date_updated as date_updated'; 
      $criteria->join = 'join tbl_tag t on i.id = t.item_id'; 
      $criteria -> addCondition('t.tag_group_id = ' . $tag_group_id); 
      $criteria -> addCondition('t.reference_type = ' . $ref_type); 
      $criteria -> addCondition('t.tag_group_id = ' . $id); 
      $criteria -> addCondition('i.item_type = ' . $item_type); 
      $criteria -> addCondition('i.item_id = ' .$item_id); 
      $criteria -> addCondition('i.status = "active"'); 

      $item_list = Items::model() -> findAll($criteria); 

      $item_list_data = array(); 
      foreach ($templates_list as $listdata => $data) { 
       $columns = array(); 
       $columns['Title'] = $data['title']; 
       $columns['Content'] = $data['content']; 
       $columns['Date Updated'] = $data['date_updated']; 
       $columns['id'] = $data['id']; 

       $item_list_data[] = $columns; 
      } 
      return $item_list_data; 
     } 

Модели по пути генерируются.

Но я не знаю, чего я пропустил или что-то в этом роде. Есть ли что-нибудь, что вы можете вам помочь? Любая идея очень ценится.

+0

Вы, вероятно, имеете неопределенные переменный, хотя трудно сказать, потому что у вас есть затушевывает определение функции. Я настоятельно рекомендую вам найти свои журналы ошибок и посмотреть на них. Внутренние ошибки сервера, как правило, являются самыми легкими для исправления, поскольку они, как мне кажется, являются (по моему опыту) простыми опечатками. Вам нужно прочитать свои журналы ошибок, чтобы выяснить, где проблема. –

+0

нам нужно увидеть ошибку сервера – tinybyte

+0

Какая ошибка? – redGREENblue

ответ

0

колонна из Элементов таблицы по умолчанию будет иметь псевдоним т, поэтому для указания столбца ID, вы должны t.id, t.title, ... и в конце концов вы должны указать типа соединения ,

Я рекомендую использовать первый подход:

$result = Yii::app()->db->createCommand() 
    ->select('i.id as id, i.title as title, i.content as content') 
    ->from('tbl_tags t') 
    ->join('tbl_items i' , 't.item_id = i.id') 
    ->where('t.tag_group_id = :value1' , array(':value1' => $value1)) 
    ->andWhere('i.item_id = :value2' , array('value2' => $value2)) 
    ->group('t.ref_id')->queryAll(); // this will be returned as an array of arrays 

второй

, и когда у наши получать данные с активной записью, вы не можете получить данные обратно, а другой столбец, который не находится в списке моделей свойств, попробуйте это

public function getItemsListByTagGroup(. . .){ 

     $criteria = new CDbCriteria; 
     $criteria->select = 'i.id , i.title , i.content , i.date_updated'; // if these columns are not in model, won't get fetched 
     $criteria->join = 'INNER JOIN tbl_items i on i.id = t.item_id'; // incorrect table join was in here 
     $criteria -> addCondition('t.tag_group_id = ' . $tag_group_id); 
     $criteria -> addCondition('t.reference_type = ' . $ref_type); 
     $criteria -> addCondition('t.tag_group_id = ' . $id); 
     $criteria -> addCondition('i.item_type = ' . $item_type); 
     $criteria -> addCondition('i.item_id = ' .$item_id); 
     $criteria -> addCondition('i.status = "active"'); 

     $item_list = Items::model() -> findAll($criteria); // this will be fetched as an array of objects 

     $item_list_data = array(); 
     foreach ($templates_list as $listdata => $data) { 
      $columns = array(); 
      $columns['Title'] = $data->title; 
      $columns['Content'] = $data->content; 
      $columns['Date Updated'] = $data->date_updated; 
      $columns['id'] = $data->id; 

      $item_list_data[] = $columns; 
     } 
     return $item_list_data; 
    } 
+0

все тот же .. у меня ничего нет. – elL

+0

Нужно ли определять отношения в моделях, если я использовал JOINS? – elL

+0

, если вы хотите использовать отношения активных записей, вы можете использовать «с», иначе вам придется использовать типичное соединение – tinybyte

Смежные вопросы