我有一个 Classes
, Semesters
, Users
和 Visits
的数据库( Visits
是 Users
和 Classes
的连接表)关系是:
User
hasAndBelongsToMany Class
(通过访问 Class
belongsTo Semester
现在我想查看所有 Visits
与 Classes
在一个活动 Semester
( Semester
表有一个字段 is_active
)我读了一个关于find方法的包含选项,并试过这样的事情:
$option = array(
"contain" => array(
"Class" => array(
"Semester" => array(
"conditions" => array("Semester.is_active" => true)
)
),
),
"conditions" => array(
"Visit.user_id" => $id,
)
);
但是有了这个,找到了一个不活跃的学期的课程,只有学期不是 .
这有什么不对吗?或者还有其他方式吗?
2 回答
现在我有了一个解决方案:我使用了
joins
选项来查找方法 .当您使用contains时,就像您的情况一样,查询不是直接内连接,即Class内连接与Semester . 首先拉出类记录,然后在学期表上会有第二个查询条件(其中class_id IN(第一个查询的结果) . 所以即使在学期表中没有找到记录,蛋糕仍然会返回找到 class 记录 .
cake然后将2个查询的结果合并在一起产生1个结果 .