Как я могу получить данные отношения по 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;
}
}