我有这样的表格方案:
我的任务是通过关系从第三个表中获取事件的描述字符串,如下所示:
'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
和第三个表格中的事件列表,它链接到每个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 :(得分: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
}
}
我希望它有所帮助