关联模型中的CakePHP条件
我有一个数据库,其中包含关联模型中的CakePHP条件,cakephp,model,conditional-statements,database-relations,contain,Cakephp,Model,Conditional Statements,Database Relations,Contain,我有一个数据库,其中包含类,学期,用户,以及访问(访问是用户和类的联接表) 这些关系是: UserhasandbelongtomanyClass(通过访问 课程属于学期 现在,我想查看活动的学期中类的所有访问(学期表中有一个字段处于活动状态) 我阅读了关于find方法的contain选项,并尝试了以下方法: $option = array( "contain" => array( "Class" => array( "Semester" =&
类
,学期
,用户
,以及访问
(访问
是用户
和类
的联接表)
这些关系是:
User
hasandbelongtomanyClass
(通过访问
课程
属于学期
现在,我想查看活动的学期中类的所有访问(学期表中有一个字段处于活动状态
)
我阅读了关于find方法的contain选项,并尝试了以下方法:
$option = array(
"contain" => array(
"Class" => array(
"Semester" => array(
"conditions" => array("Semester.is_active" => true)
)
),
),
"conditions" => array(
"Visit.user_id" => $id,
)
);
但是有了这个,在一个不活跃的学期里的课程被发现了,只有这个学期没有
这有什么问题吗?或者还有其他方法吗?当您使用contain时,就像在您的例子中一样,查询不是直接的内部联接,即类与学期的内部联接。
首先提取类记录,然后在学期表上进行第二次查询,查询条件为(其中class_id为IN(第一次查询的结果))。
因此,即使在学期表中没有找到任何记录,cake仍然会返回找到的课堂记录
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然后将两个查询的结果合并在一起,生成一个结果。现在我有了一个解决方案:
我对find方法使用了连接
选项
"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
),
所以:访问以下到类和类以下到学期,对吗?你可以通过学期模型进行查询……这样,你可以先提取活动学期,然后将类与结果关联,从而消除不需要的类