Intereting Posts
доступ запрещен для пользователя @ 'localhost' в базу данных '' PHP: не могу установить Cookie php показывает на час раньше PHP GMAIL Контакты XML-анализ с помощью DOMDocument и cURL Добавление Node.js (для уведомлений в режиме реального времени) к существующему PHP-приложению разбиение на страницы ошибок в кодеригенере Почему мне нужно вызывать «exit» после перенаправления через заголовок («Location ..») в PHP? Codeigniter update_batch не работает Как отображать только ненулевые поля в mysql через php и HTML? Добавить миниатюру продукта в мой аккаунт – Последние заказы – Woocommerce Кодировка UTF-8 с интернет-исследователем% u20AC to & euro; Если имена верхних регистров преобразуются в правильное дело, обрабатываются «О'Хара», «Макдональд», «Ван дер Слоут» и т. Д. Контактная форма PHP перенаправление не работает Как массовое обновление данных mysql одним запросом? Как включить () все файлы PHP из каталога?

Yii cdbcriteria выберите столбцы отношения

У меня очень трудное время, чтобы выбрать имена пользователей всех сообщений в демо-версии блога, приведенных в Yii ..

автор – отношение класса post с пользователем …

$criteria = new CDbCriteria; $criteria->with='author'; $criteria->select='author.username'; $dataProvider=new CActiveDataProvider('Post', array( 'criteria' => $criteria, )); var_dump($dataProvider->getData()); 

Ошибка:

Активная запись «Почта» пытается выбрать недопустимый столбец «author.username». Обратите внимание: столбец должен существовать в таблице или быть выражением с псевдонимом.

то, что делает, – это eager loading означает, что данные отношения будут также загружаться из базы данных вместе, а когда когда вы вызовете это отношение, фактического запроса не будет.

Какой выбор делает он, он выбирает его из базы данных и сопоставляет его с переменной модели.

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

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

И если вы хотите назвать имя пользователя как часть модели сообщений, вам нужно объявить его как свойство в модели, а затем указать псевдоним в 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; 

Теперь он не будет вызывать ошибку, и вы можете получить доступ к имени пользователя в обоих направлениях. $post->auther_username и $post->auther->username

Попробуй это:

 $criteria = new CDbCriteria; $criteria->with=array('author'=>array('select'=>'username')); // you can still select Post table columns here $criteria->select='post_content'; $dataProvider=new CActiveDataProvider('Post', array( 'criteria' => $criteria, )); var_dump($dataProvider->getData()); 

Попробуй это:

 $criteria = new CDbCriteria; $criteria->with=array('author'=>array('select'=>'username')); $dataProvider=new CActiveDataProvider('Post', array( 'criteria' => $criteria, )); var_dump($dataProvider->getData()); 

Источник: CActiveRecord.with

Чтобы настроить параметры «на лету», мы должны передать параметр массива методу with (). Ключи массива – это имена отношений, а значения массива – соответствующие параметры запроса.