2013-06-20 7 views
0

Я создал контроллер для извлечения данных в формате JSON, для которых мне нужны все реляционные данные в формате JSONкак запросить реляционных данных в Yii

моя база данных как

TABLE_1 
_id category1 
1  fruit 
2  vegetable 

TABLE_2 
_id type 
1  winter 
2  summer 

TABLE_3 
_id  name cata_table1 cata_table2  
1  apple 1    2 

Here cata_table1 is foreign key to TABLE_1 and cata_table2 foreign key to TABLE_2 

$sql="SELECT * from TABLE_3"; 
$command=$connection->createCommand($sql); 
$row=$command->queryAll(); 

Как я должен запросить реляционные данные для вывода значения поля cata_table1 из table1 и cata_table2 от table2 так, что мой выходной результат запроса имеет `_id, имя, TABLE_1.category1, TABLE_2.type

model TABLE_3 

class TABLE_3 extends CActiveRecord 
{ 
public static function model($className=__CLASS__) 
{ 
    return parent::model($className); 
} 

public function tableName() 
{ 
    return 'TABLE_3'; 
} 
public function rules() 
{ 
    return array(
     array('_id,name,cata_table1,cata_table2', 'required'), 
     array('_id, name, cata_table1, cata_table2', 'safe', 'on'=>'search'), 
    ); 
} 
public function relations() 
{ 

} 
+0

Может у размещает вашу модель table_3 с помощью соотношения мы можем сделать это – Ninad

+0

GII не генерировали связи ?? – Ninad

ответ

0

Попробуйте

Вы можете иметь отношение в вашей модели TABLE_3, как показано

public function relations() 
    { 
     'relation1' => array(self::BELONGS_TO, 'TABLE_1', '_id'), 
     'relation2' => array(self::BELONGS_TO, 'TABLE_2', '_id'), 
     } 

ли такой же, как у уже сделано выше, то сделать что-то вроде этого

$sql="SELECT * from TABLE_3"; 
$command=$connection->createCommand($sql); 
$row=$command->queryAll(); 
$sample=array(); 
foreach($row as $key=>$value){ 
    $sample=array('id'=>$value->id,'name'=>$value->name,'name1'=>$value->relation1->category1,'name2'=>$value->relation2->type) 
} 

После этого закодировать json

echo CJSON::encode($sample); 

Проверьте, не синтаксис, это не идеальный анв эр

+0

спасибо за это, но отношение недоступно внутри цикла foreach для значения $ –

+0

Создайте модель еще раз для вашей модели TABLE_3 и попробуйте имена отношений, сгенерированные инструментом gii – Ninad

+0

Отношение должно быть доступно, если значение $ является объектом определенной записи – Ninad

0

Создание отношений, как сказал Ninad в TABLE_3 модели:

public function relations(){ 
    'relation1' => array(self::BELONGS_TO, 'TABLE_1', '_id'), 
    'relation2' => array(self::BELONGS_TO, 'TABLE_2', '_id'), 
} 

В действии:

$results = array(); 
$models = TABLE_3::model()->with(array('table1','table2'))->findAll(); 
foreach($models as $model){ 
    $results[] = array($model->name, $model->relation1->category1, $model->relation2->type); 
} 
echo json_encode($results);