sharehua
(8080268)
1
Organ User Attendance 3个model。
user有organ的外键Organ_id,Attendance 有User的外键user_id;
Organ 1对多User User 1对多Attendance
User中通过'attendance'=>array(self::HAS_ONE,'Attendance','user_id','joinType'=>'left outer join','on'=>'??.attendanceDate=:attendanceDate'),可以关联出user今天的出勤记录。
但怎样在Organ中关联出勤的人呢?类似如下实现,'userListAttendance'=>array(self::HAS_MANY,'User','organ_id','condition'=>'state='考勤'','condintion'=>'attendance!=null'),
这样设置'condintion'会出错,没有合法列attendance,因为attendance是user的relation。
sharehua
(8080268)
2
我把题目和内容修改了,感觉就差1步就可以实现了。但不知道在哪里?
qiang
(Qiang Xue)
3
是不是这样的问题:给定A, B, C三个model,你希望获得A列表,限定条件是基于C的。
这种情况用AR来做比较复杂。你可以试试下面的代码:
A::model()->with('B.C'=>array(关于C的限定条件))->together()->findAll();
sharehua
(8080268)
4
我用C的属性做限定,成功了。 
但前提是需要把 用C的别名做前缀才可以限定,而C的别名是有可能变动的,不科学。
我直接用C的表名做前缀会说
Unknown column ‘_general_attendance.situation’ in ‘where clause’
,因为这里的situation或者别的字段是很容易就重名的。
qiang
(Qiang Xue)
5
目前只能这样了:用表名做前缀,并且设置alias选项。
qiang
(Qiang Xue)
7
'alias'是relation的一个选项。和'condition'等其他选项一样设置。