Activerecord Yii:通过一个表到另一个表的关系

Activerecord Yii:通过一个表到另一个表的关系,activerecord,yii,relation,Activerecord,Yii,Relation,我有这样的表格安排: 我的任务是通过关系从第三个表中获取事件的描述字符串,看起来是这样的: 'dates'=>array(self::HAS_MANY, 'CalendarDates', '', "on" => '"t"."CalendarDateId"="dates"."calendar_date_id"'), 'events'=>array(self::HAS_MANY, 'CalendarDayEven

我有这样的表格安排:

我的任务是通过关系从第三个表中获取事件的描述字符串,看起来是这样的:

'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"')

所以,我认为,从第一关系< /P>获得<代码>日期<代码>

$UserCalendar =  CalendarsUsers::model()->
                    with(array('dates','events'))->
                    find('user_id =:user_id', array(':user_id'=> $userId));
我会得到这样的计划

Date as Dates
以及第三个表中的事件列表,该表链接到每个
日期

但是使用上面给出的关系,我得到了“平行”关系,其中日期和事件是“平行”的,所以我不能编写这样的代码:

<?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; ?>

日期:
活动:

这将返回预期的错误。

建议尝试以下修改。 由于我不知道您准确的表名,我相对地称它们为
第一个
第二个
第三个

在第一个
模型中,输入以下关系:

'second' => array(self::HAS_MANY, 'SECOND_TABLE_MODEL', 'FIRST_TABLE_KEY_WHICH_IS_RELATED_TO_SECOND')
'third' => array(self::HAS_MANY, 'THIRD_TABLE_MODEL', 'SECOND_TABLE_KEY_WHICH_IS_RELATED_TO_THIRD')
在第二个模型中,输入以下关系:

'second' => array(self::HAS_MANY, 'SECOND_TABLE_MODEL', 'FIRST_TABLE_KEY_WHICH_IS_RELATED_TO_SECOND')
'third' => array(self::HAS_MANY, 'THIRD_TABLE_MODEL', 'SECOND_TABLE_KEY_WHICH_IS_RELATED_TO_THIRD')
现在,让我们跳过第三个表关系。我认为您只想在<代码>第三表中访问<代码>描述>代码>。 那么,如果您喜欢下面的内容:

$firstRecords=First::model()->findAll();
foreach($firstRecords as $fr){
    $second=$first->second;
    foreach($second->third as $st){
       //$st->description
    }
}
您拥有第一个
表中的所有记录。您不需要在此处将
一起使用。要访问与第一个
表相关的第二个表数据,您可以执行以下操作:

foreach($firstRecords as $fr){
    //$fr->second->ATTRIBUTE_NAME
}
最后,如果您想从
第三个
表访问
说明
,您可以执行以下操作:

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

我希望它有帮助

$day是一个扩展CActiveRecord的对象,对吗?为什么要在foreach中使用它作为数组?嗯,当我尝试使用这个代码$fr->second->ATTRIBUTE_NAME(我的是foreach($firstRecords as$record){var_dump($record->dates->date_event);};)时,它返回空值。dates是第二个模型你在第一个模型的关系方法中放了正确的关系吗?是的,你说得对,这是我的错误。返回OK,进一步尝试。作为建议,您可以使用CVarDumper::dump($variable,6789,true)代替var_dump,这非常强大。