【问题标题】:Modifying CDbCriteria to look at my pivot table修改 CDbCriteria 以查看我的数据透视表
【发布时间】:2015-01-27 11:34:01
【问题描述】:

我有三个表 - myusers、organization_classrooms、organization_classrooms_myusers(这是一个位于 organization_classrooms 和 myusers 表之间的数据透视表)

organisation_classrooms(classroom_id, organization_id, title) organization_classrooms_myusers(classroom_id, user_id) myusers(user_id, organization_id, fullname)

我的一个模型中有以下 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

我想修改模型,以便对于属于该组织的每个 organization_classroom,检查 user_id 1558 是否存在于 organization_classrooms_myusers 数据透视表中并基本上设置一个布尔值

例如

我想要通过上面用于 1558 的 user_id 的 organization_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 查询,该查询将产生这个结果,那也将非常有用。

【问题讨论】:

    标签: sql yii frameworks


    【解决方案1】:

    在“organisation_classrooms_myusers”中添加列“id”(primaryKey)。

    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 
    

    【讨论】:

      【解决方案2】:

      我在另一个网站上发现了这个,这让我朝着正确的方向前进 - 如果它对其他人有帮助:

      // 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 */
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-20
        • 1970-01-01
        • 2014-04-25
        • 2019-07-18
        • 1970-01-01
        • 1970-01-01
        • 2020-02-23
        • 1970-01-01
        相关资源
        最近更新 更多