Activerecord 如何使用活动记录指定此关系?
通过关系,我非常困惑于Activerecord 如何使用活动记录指定此关系?,activerecord,yii,relationship,Activerecord,Yii,Relationship,通过关系,我非常困惑于。这是我的桌子 批次(id、名称) 主题(id、批次id、名称) 教师(身份证、姓名) 学科教师(学科id,教师id) 关系是 批有很多科目 受试者属于批次 通过学科教师,学科多教师 通过学科教师教授许多学科 否如何指定获取的关系 一批教师 分配给老师的课程 我尝试了一个选择,但似乎对很多关系都不起作用。除了反复阅读每一个主题,还有什么更好的方法吗 编辑: 我知道我可以通过教师模型中的函数得到教师的科目 public function getBatches() {
。这是我的桌子
批次(id、名称)
主题(id、批次id、名称)
教师(身份证、姓名)
学科教师(学科id,教师id)
关系是
批有很多科目
受试者属于批次
通过学科教师,学科多教师
通过学科教师教授许多学科
否如何指定获取的关系
一批教师
分配给老师的课程
我尝试了一个选择,但似乎对很多关系都不起作用。除了反复阅读每一个主题,还有什么更好的方法吗
编辑:
我知道我可以通过教师模型中的函数得到教师的科目
public function getBatches()
{
$batches=array();
foreach($this->subjects as $subject)
$batches[]=$subject->batch;
return $batches;
}
现在我可以通过引用$teacher->batches
获得教师的批次。但我需要一个更清晰的关系式解决方案,以便在代码中的某些地方,我可以用('batches')->findAll()
来做一个类似于Teacher::model()->的语句。除非你不是通过活动记录
//pseudo code....
Teacher=new Teacher::model()->with('subject.batch')->find();
subjects=Teacher->subjects;
for(subjects as subject){
batch=subejct->batch;
}
through关系只能应用于一个多或一个一的情况,而不是很多。此解决方案的问题是,我们不能使用任何with('batches')进行快速加载,我认为这将导致执行许多查询,但它不起作用。因为在教师模式中没有“主体”。它是“主题”。所以我们不能在()中使用'subject.batch',我想,它没有区别,试着使用subjects.batch,因为它是关系,而不是对象,所以它是单数还是复数都无所谓。但是让我知道它是否有效:)你可能也需要添加一个together()链。