Yii AR Search mit Relations Attribute Has_Many


Um eine Suche auch über die Relationen einer Active Record Klasse zu realisieren, muss Folgendes beachtet werden:

1. Die Relation muss vorhanden sein:

 public function relations()
    {
            'categories' => array(self::HAS_MANY, 'place_id', 'category_id'),

2. Die Relation muss suchbar sein:

public function rules()
    {
            array('name, categories', 'safe', 'on' => 'search'),

3. In der Suchfunktion muss folgender Code eingefügt werden. Das OR ist dabei optional aber wichtig, wenn man sich wundert, dass keine Ergebnisse angezeigt werden in der View.

  public function findPlaces($searchTerm)
    {
        $criteria = new CDbCriteria;

        $criteria->compare('name', $this->name, true, 'OR');
        $criteria->with = array('categories' => array("together" => true));
        $criteria->compare('categories.name', $searchTerm,true, 'OR');

        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
        ));
    }