то, что делает with
, это eager loading
.. это означает, что данные отношения также будут загружены из базы данных вместе с ним, и когда вы вызовете отношение, реальный запрос не будет ..
Что делает select, это выбирает его из базы данных и отображает его в переменную модели.
Теперь в вашем случае вы пытаетесь записать столбец некоторого отношения в select, который будет там в select, даже не записав его, , но поскольку нет соответствующей переменной для отображения этого значения, yii выдает ошибку ..
Итак, во-первых, если вам нужно имя пользователяВ ответ на запрос auther, вы можете получить его с помощью вызова отношений, который не будет вызовом базы данных, и вам не нужно писать select.
И если вы хотите вызвать имя пользователя как частьтолько модель поста вы должны объявить его как свойство в модели, а затем указать псевдоним в select ..
$criteria = new CDbCriteria;
$criteria->with='author';
$criteria->select='author.username as auther_username';
$dataProvider=new CActiveDataProvider('Post', array(
'criteria' => $criteria,
));
var_dump($dataProvider->getData());
и в вашей модели Post объявить ..
public $auther_username;
Теперь не будетw ошибка, и вы можете получить доступ к имени пользователя обоими способами .. $post->auther_username
и $post->auther->username