修改 CDbCriteria 以查看我的数据透视表 table
Modifying CDbCriteria to look at my pivot table
我有三个 tables - myusers、organisation_classrooms、organisation_classrooms_myusers(这是 organisation_classrooms 和 myusers table)
organisation_classrooms(classroom_id, organisation_id, 标题)
organisation_classrooms_myusers(classroom_id, user_id)
myusers(user_id, organisation_id, 全名)
我的一个模型中有以下 search() 函数:
return new CActiveDataProvider(OrganisationClassroom::model()->currentUserOrganisation(), array(
'criteria' => $criteria,
'pagination' => array(
'pageSize' => 10,
)
));
这是我正在使用的数据集
organisation_classrooms
classroom_id title organisation_id
1 Class A 37383
2 Class B 37383
3 Class C 37383
organisation_classrooms_myusers
classroom_id user_id
2 1558
3 1558
myusers
user_id organisation_id name
1558 37383 Bob Doe
我想修改模型,以便对于属于组织的每个 organisation_classroom,检查 user_id 1558 是否存在于 organisation_classrooms_myusers 枢轴 table 并基本上设置一个布尔值
例如
我想要通过上面用于 1558user_id
的 organisation_classrooms CActiveDataProvider 返回的以下数据
classroom_id title organisation_id pivot_set
1 Class A 37383 0
2 Class B 37383 1
3 Class C 37383 1
谁能建议如何解决这个问题?或者,如果任何人都可以演示一个原始的 SQL 查询将产生这个结果,那也将非常有用。
在 "organisation_classrooms_myusers" 中添加列 "id"(主键)。
SELECT room.classroom_id,room.title,room.organisation_id, if(rela.user_id,1,0) AS pivot_set FROM `organisation_classrooms` AS room LEFT JOIN organisation_classrooms_myusers AS rela ON rela.classroom_id = room.classroom_id
我在另一个网站上找到了这个,它让我找到了正确的方向 - 如果它对其他人有帮助:
// CDbCriteria $criteria already prepared given other search criteria, then: */
$criteria->select = 't.classroom_id, t.title, t.organisation_id, case when cu.classroom_id is null then 0 else 1 end as pivot_set';
$criteria->join = 'left join organisation_classrooms_myusers cu on cu.classroom_id=t.classroom_id and cu.user_id=:uid';
$criteria->params['uid'] = $uid; /* e.g. 1558 */
我有三个 tables - myusers、organisation_classrooms、organisation_classrooms_myusers(这是 organisation_classrooms 和 myusers table)
organisation_classrooms(classroom_id, organisation_id, 标题) organisation_classrooms_myusers(classroom_id, user_id) myusers(user_id, organisation_id, 全名)
我的一个模型中有以下 search() 函数:
return new CActiveDataProvider(OrganisationClassroom::model()->currentUserOrganisation(), array(
'criteria' => $criteria,
'pagination' => array(
'pageSize' => 10,
)
));
这是我正在使用的数据集
organisation_classrooms
classroom_id title organisation_id
1 Class A 37383
2 Class B 37383
3 Class C 37383
organisation_classrooms_myusers
classroom_id user_id
2 1558
3 1558
myusers
user_id organisation_id name
1558 37383 Bob Doe
我想修改模型,以便对于属于组织的每个 organisation_classroom,检查 user_id 1558 是否存在于 organisation_classrooms_myusers 枢轴 table 并基本上设置一个布尔值
例如
我想要通过上面用于 1558user_id
的 organisation_classrooms CActiveDataProvider 返回的以下数据classroom_id title organisation_id pivot_set
1 Class A 37383 0
2 Class B 37383 1
3 Class C 37383 1
谁能建议如何解决这个问题?或者,如果任何人都可以演示一个原始的 SQL 查询将产生这个结果,那也将非常有用。
在 "organisation_classrooms_myusers" 中添加列 "id"(主键)。
SELECT room.classroom_id,room.title,room.organisation_id, if(rela.user_id,1,0) AS pivot_set FROM `organisation_classrooms` AS room LEFT JOIN organisation_classrooms_myusers AS rela ON rela.classroom_id = room.classroom_id
我在另一个网站上找到了这个,它让我找到了正确的方向 - 如果它对其他人有帮助:
// CDbCriteria $criteria already prepared given other search criteria, then: */
$criteria->select = 't.classroom_id, t.title, t.organisation_id, case when cu.classroom_id is null then 0 else 1 end as pivot_set';
$criteria->join = 'left join organisation_classrooms_myusers cu on cu.classroom_id=t.classroom_id and cu.user_id=:uid';
$criteria->params['uid'] = $uid; /* e.g. 1558 */