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,这非常强大。