2014-01-04 3 views
-1

У меня есть 2 стола. таблицы имеют отношение (HAS_MANY)
table1: пользователь (номер, имя) table2: адрес (идентификатор, идентификатор пользователь, адрес)
пользователя может имеет некоторый адрес определяет соотношение в молях: User.php и address.phpКак я могу получить данные отношения CActiverecord в yii?

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> 
+0

где вы с помощью '$ DataProvider = новый CActiveDataProvider ('пользователя')' в вашем проекте? –

+0

@kumar_v я отредактировал мой вопрос – maryam

ответ

1

В функции indexaction измените код DataProvider как показано ниже.

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

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

Здесь address is relation имя, указанное в вашем файле модели пользователя.

+0

Когда я пишу $ data-> address-> адрес (имя поля), у меня есть ошибка include (address.php) [function.include]: не удалось открыть поток: нет такого файла или каталога – maryam

+0

, где вы использовали мой ответ? –

+0

in _view.php и i wite print_r ($ data) У меня нет данных об адресе – maryam

0

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

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

Примечание: -address в с ('address') - это отношение Name.

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

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; 
} 
    } 
+0

меня от CActiveDataProvider я не могу получить данные отношения? – maryam

0

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

Дайте ему попробовать

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

    } 
} 
Смежные вопросы