Klucze w bazie danych są ok.
W modelu postów mam taka relację(MANY_MANY)
mam równiez taką metodę:
public function search($id){
   $criteria=new CDbCriteria;
   $criteria->compare('id',$this->id);
   $criteria->compare('title',$this->name,true);
   $criteria->compare('text',$this->mail,true);
   $criteria->compare('insert_time',$this->insert_time,true);
   $criteria->with = array('kategorie');
   $criteria->condition = 'kategorie.id = '.$id;
   return new CActiveDataProvider($this, array(
      'criteria'=>$criteria,
   ));
}
W kontrolerze:
public function actionViewPosts($id){
   $model=new Posts();
   $model->search($id);
   $model->unsetAttributes(); 
   if(isset($_GET['Posts']))
     $model->attributes=$_GET['Posts'];
   $this->render('viewPosts',array(
      'posts'=>$model,
      'id'=>$id
   ));
}
W widoku:
<?php 
$this->widget('zii.widgets.grid.CGridView', array(
   'id'=>'posts-grid',
   'dataProvider'=>$posts->search($id),
   'filter'=>$posts,
   'columns'=>array(
	'id',
	'title',
	'text',
	'link',
	array(
	   'class'=>'CButtonColumn'
	),
   ),
),
)); 
?>
I niestety, w prawdzie wyszukuje posty, ale znajduje dla każdej kategorii wszystkie(tzn. nie dzieli na kategorie - zawsze mam wszystie posty :/). W dodatku padła ta światna przeszukiwajka tabeli -> chcąc filtrować sobie ajax’owo po kolumnach system tylko mieli i nic nie zmienia:/
PS.
Gdy utworzyłem model kategorie_posty i w nim zmodyfikowałem funckcje search to działało tylko z koleji zamiast nazw miałem same id 