Как я могу получить данные отношения по CActiverecord в YII?

У меня есть 2 таблицы. таблицы имеют отношение (HAS_MANY)
таблица1: пользователь (идентификатор, имя) таблица2: адрес (идентификатор, идентификатор пользователя, адрес)
У пользователя может быть какой-то адрес, который я определяю в родинках: user.php и address.php

user.php

 'address' => array(self::HAS_MANY, 'address', 'userId'),

address.php

'user' => array(self::BELONGS_TO, 'user', 'userId'),

когда я пишу

$dataProvider = new CActiveDataProvider('user')

я получаю только записи из таблицы пользователей, но хочу получить записи из двух таблиц, я хочу получить имя, массив (адрес) Для каждого пользователя, как это сделать?

UserController.php

public function actionIndex() {

         $dataProvider = new CActiveDataProvider('User');
        $this->render('index', array(
            'dataProvider' => $dataProvider,
        ));
    }   

index.php

<?php $this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider,
    'itemView'=>'_view',
)); ?>

_view.php

<b><?php echo $data->name)); ?>: <?php      $data->address->address;     ?>:</b>

3 ответа

Решение

В функции indexaction измените код поставщика данных, как показано ниже.

$dataProvider = new CActiveDataProvider('User','criteria'=>array(
   'with'=>array(
       'address'
    ),
    'together'=>true,
));

Вы можете получить данные из address использование таблицы $data->address->address_table_field_name в вашем файле просмотра.

Вот address является relation имя определено в вашем файле модели пользователя.

Вам не нужно использовать CActiveDataProviderСкорее используйте модель напрямую.

Попробуй

foreach( User::model()->findAll() as $user ) {
   $address = $user->address;
   foreach( $address as $a ) {

   }
}

Попробуйте использовать

$model= User::model()->with('address')->findAll();

Заметка:- address в с ('адрес') является имя отношения.

Например: - Чтобы получить пользовательские записи попробуйте это

foreach($model as $record)
{
echo $record->id . $record->name;
}

Чтобы получить адресные записи попробуйте это

foreach($model as $record)
    {
    foreach($record->address as $myaddress)
{
echo $myaddress->id . $myaddress->userId . $myaddress->address;
}
    }
Другие вопросы по тегам