ModelSearch::relationalAttribute PHP Method

relationalAttribute() protected method

This will take an attribute name many layers of relationship deep, make sure that all appropriate tables are included with the result and return a string that is then acceptable to be used in a where clause.
protected relationalAttribute ( CDbCriteria $criteria, string $attribute, string $search ) : string
$criteria CDbCriteria
$attribute string
$search string
return string
    protected function relationalAttribute(CDbCriteria $criteria, $attribute, $search)
    {
        $search = $this->model->getTableAlias() . '.' . $search;
        if (strpos($attribute, '.')) {
            $relationship = explode('.', $attribute);
            $relationshipArray = array();
            while (count($relationship) > 1) {
                $relationshipString = array_shift($relationship);
                $search = $relationshipString;
                if (count($relationshipArray)) {
                    $relationshipString = implode('.', $relationshipArray) . '.' . $relationshipString;
                }
                $relationshipArray[] = $relationshipString;
            }
            $search .= '.' . array_shift($relationship);
            $criteria->together = true;
            $criteria->with = array_merge($criteria->with, $relationshipArray);
        }
        return $search;
    }