关联模型中的CakePHP条件



我有一个包含ClassesSemestersUsersVisits的数据库(VisitsUsersClasses的联接表)关系是:

User拥有并属于许多Class(通过访问Class属于Semester

现在我想查看活动的Semester中所有具有ClassesVisitsSemester表有一个字段is_active)我读到了find方法的包含选项,并尝试了这样的方法:

$option = array(
    "contain" => array(
       "Class" => array(
          "Semester" => array(
                 "conditions" => array("Semester.is_active" => true)
           )
        ),
     ),
     "conditions" => array(
         "Visit.user_id" => $id,
         )
     );

但有了这一点,就可以找到一个不活跃学期的课程,只有这个学期没有。

这个有什么问题吗?或者还有别的办法吗?

现在我有了一个解决方案:我在查找方法中使用了joins选项。

"joins" => array(
         array(
            "table" => "classes_semesters",
            "alias" => "ClassesSemesters",
            "type" => "inner",
            "conditions" => array(
                "Visit.class_id = ClassesSemesters.class_id"        
            )   
        ),
        array(
            "table" => "semesters",
            "alias" => "Semester",
            "type" => "inner",
            "conditions" => array(
                "ClassesSemesters.semester_id = Semester.id"        
            )       
        )
 ),
"conditions" => array(
        "Visit.user_id" => $id,
        "Semester.is_active" => true
),

当您使用contain时,就像在您的案例中一样,查询不是直接的内部联接,即使用Semester的class内部联接。首先提取类记录,然后在学期表上进行第二次查询,条件为(其中class_id IN(第一次查询的结果)。因此,即使在学期表中没有找到任何记录,蛋糕仍然会返回找到的班级记录。

query 1. $class = select * from classes where bla bla 
query 2. select * from semesters where class_id in (result from query 1) and other conditions bla bla

cake然后将来自2个查询的结果合并在一起以产生1个结果。

相关内容

  • 没有找到相关文章

最新更新