2012-05-15 4 views
1

У меня есть функция GetStudents в модели агента. где я привожу студентов, связанных с агентами.Отношения в YII

Но я хочу показать несколько полей студентов из другой таблицы Например

**Agent table** (agent has students) 
agent_id 

**student table** 
STUDENTID pkey 
agent_id 

**relation table** (this table creates relation between student and household) 
StudentID HOUSEHOLDID 

**HOUSEHOLD TABLE** 
HouseHOLDID Householdname 

Я хочу, чтобы принести householdname, когда я получать все детали студента.

действительно ищет bazzare для меня, как я новичок в YII

МОЕ функцию в модели агента.

public static function getStudents($id) { 
     $relationships = Relationship::model()->findAll('type = :type AND source = :agent_id', array(':type' => 2, ':agent_id' => $id)); 
     //$relationships=sort($relationships); 
     // Generate relationship array 

     //print_r($relationships); 
     foreach ($relationships as $relationship) { 
      $in[] = $relationship->destination; 
     } 

     // Generate db condition 
     $criteria = new CDbCriteria; 
     if (! isset($in) || ! is_array($in) || sizeOf($in) == 0) { 
      $in[] = -999; 
     } 
     $criteria->addInCondition('StudentID', $in, 'OR'); 



     return new CActiveDataProvider('Student', array(
      'criteria' => $criteria, 
      'sort'=>array('defaultOrder'=>array(
    'StudentID'=>CSort::SORT_DESC, 
)), 
     )); 
    } 

Мой код для извлечения данных в пропусканием ID в него

<?php $this->widget('zii.widgets.CDetailView', array(
    'data' => $model, 
    'attributes' => array(
array(
    'label' => 'Agent Details', 
    'type' => 'raw', 
    'value' => '', 
    'cssClass' => 'heading', 
), 
'agent_id', 
'user.email', 
'first_name', 
'last_name', 
'company', 
'phone', 
    ), 
)); ?> 

Любая помощь будет значительно appreicated.

Благодаря Ab

ответ

2

Сначала вы должны сделать отношения с учеником к соотношению таблицы в relations массиве в relation model, как это ..

'student'=>array(self::BELONGS_TO, 'Student', 'StudentID'), //after belongs to student is model class name 

'household'=>array(self::BELONGS_TO, 'HOUSEHOLD', 'HOUSEHOLDID'),//after belongs to HOUSEHOLD is model class name 

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

$relationships = Relationship::model()->with('student','household')->findAll('type = :type AND source = :agent_id', array(':type' => 2, ':agent_id' => $id)); 
+0

привет за быстрый ответ .. но где же используется таблица отношений? У меня есть таблица отношений с полями StudentID HOUSEHOLDID, которые делают связь между учеником и домохозяйством. ab – abnab

+0

Отношения - это ваша модель и с («ученик», «домохозяйство»), создающая отношение с моделью отношений .. здесь ваше отношение используется в ... –

+0

Отношение «ученик» не определено в классе активной записи «Отношения» ».

'$ отношения = Связь :: model() -> with (' student ',' domestic ') -> findAll (' type =: type AND source =: agent_id ', array (': type '=> 2, ': agent_id' => $ id)); \t \t ' ' общественная функция отношений() { \t \t возвращение массива ( \t \t \t 'пользователь' => массив (само :: HAS_ONE, 'Пользователи', 'user_id'), \t \t «студент '=> array (self: BELONGS_TO,' Student ',' StudentID '), ' family '=> array (self: BELONGS_TO,' Домашнее хозяйство ',' бытовая идентификация '), ); \t} ' – abnab