2014-02-04 7 views
0

у меня есть такая схема таблиц: enter image description hereYii: отношение через одну таблицу в другую

Моя задача состоит в том, чтобы получить строку описания мероприятия из третьей таблицы с помощью отношений, которые выглядят так:

'dates'=>array(self::HAS_MANY, 'CalendarDates', '', 
           "on" => '"t"."CalendarDateId"="dates"."calendar_date_id"'), 

'events'=>array(self::HAS_MANY, 'CalendarDayEvents', '', 
           "on" => '"dates"."list_events" = "events"."date_id"') 

Таким образом, я считаю, что получение dates из первого соотношения

$UserCalendar = CalendarsUsers::model()-> 
        with(array('dates','events'))-> 
        find('user_id =:user_id', array(':user_id'=> $userId)); 

Я хотел бы получить такую ​​схему

Date as Dates 

и список событий FRON третьей таблицы, которая связана с каждым Date

Но используя соотношение, которое представлено выше, я получаю «параллельный» отношение, где даты и события " параллель ", поэтому я не могу написать такой код:

<?php foreach ($calendar->dates as $day): ?> 

     <b>Date:</b> <?php echo($day->date_event); ?> <br> 
     <i>Event:</i> 
      <?php foreach ($day as $event): ?> 
       <?php echo($event->event_description); ?> 
      <?php endforeach; ?> 
      <br/>   
<?php endforeach; ?> 

который возвращает мне ошибку, как ожидалось.

+0

$ day - это объект, который расширяет CActiveRecord, правильно? Почему вы используете его как массив внутри foreach? –

ответ

2

В качестве предложения попробуйте следующую модификацию. Поскольку я не знаю вашего точного названия таблиц, я называю их first, second и third относительно.

В вашей first модели, поставить следующее соотношение:

'second' => array(self::HAS_MANY, 'SECOND_TABLE_MODEL', 'FIRST_TABLE_KEY_WHICH_IS_RELATED_TO_SECOND') 

В вашей second модели, поставить следующее соотношение:

'third' => array(self::HAS_MANY, 'THIRD_TABLE_MODEL', 'SECOND_TABLE_KEY_WHICH_IS_RELATED_TO_THIRD') 

теперь давайте пропустить third таблицы отношений. Я считаю, что вы хотите получить доступ только к description в таблице third. Тогда, если вам нравится сильфон:

$firstRecords=First::model()->findAll(); 

У вас есть все записи из вашего First таблицы. Здесь вам не нужно использовать with. для доступа к данным second таблицы, которая связана с first таблицы вы можете сделать, как показано ниже:

foreach($firstRecords as $fr){ 
    //$fr->second->ATTRIBUTE_NAME 
} 

Наконец, если вы хотите получить доступ к таблице description от third вы можете сделать как ниже:

foreach($firstRecords as $fr){ 
    $second=$first->second; 
    foreach($second->third as $st){ 
     //$st->description 
    } 
} 

Надеюсь, это поможет

+0

Хм, когда я пытаюсь использовать этот код $ FR->> ATTRIBUTE_NAME второго (шахта Еогеасп ($ firstRecords в $ запись) { \t var_dump ($ Запись-> dates-> date_event); \t \t }; ) он возвращает мне NULL. –

+0

Даты - вторая модель –

+0

Вы указали правильное соотношение в методе отношений вашей первой модели? –

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