【问题标题】:GroceryCrud set a n-n relation with where clauseGroceryCrud 使用 where 子句设置 n-n 关系
【发布时间】:2016-05-30 06:49:07
【问题描述】:

我有三个表(简化),它们是:

我必须显示每个用户的所有房屋。
在我的控制器中,我有这样的功能:

public function create_houses_table($usr_id)
{
  $crud = new grocery_CRUD();

  $crud->set_language("italian");

  $crud->set_theme('datatables');
  $crud->set_subject('Casette');
  $crud->set_table('tbl_houses');

  $crud->set_relation_n_n('Casette', 
                          'tbl_users_houses', 
                          'tbl_users', 
                          'house_id', 
                          'user_id', 
                          'usr_name',
                          NULL,
                          array('user_id' => $usr_id));
...
}

我得到的是这样的:

每次我从组合中选择一个用户时,我都需要刷新我在 usr_id 上的列表过滤...但我总是得到所有的房子

我错了什么?

【问题讨论】:

  • 你应该使用 tbl_users 作为你的主表,然后用 $crud->where() 过滤它。但是,您将以该用户的单行表结束。这是你的意图吗?
  • 嗨@jrierab 感谢您的回复!你的意思不是我想要的。每个用户拥有不同的房屋(例如,用户 1 -> HOUSE_1、HOUSE_4、HOUSE_7)。我需要的是一种仅显示与组合中选择的用户相关联的房屋的方法。我希望我很清楚:)
  • 这不是 set_relation_n_n 的预期用途(它将在用户行内的一个字段中显示所有用户房屋)。您可以更好地从 tbl_users_houses 列出您想要的内容,使用 $crud->where() 按客户端过滤,并通过两个简单的关系与其他表链接。
  • 嗨@jrierab,你是对的。我改变了我的逻辑,现在我能够完成我想要的。
  • 嗨@Barzo,我刚刚添加了上面的评论作为答案,所以你可以接受它,如果你愿意的话。这样,问题就显示为已结束(已解决)。

标签: php codeigniter grocery-crud


【解决方案1】:

如果我理解正确,您正在尝试仅获取登录用户的记录...并且您每个 house 有多个用户,因此存在 n-n 关系。

我也遇到了这个问题,这就是我所做的。

        $myprojects = $this->admin_model->get_employee_projects($this->user_id);
        $myprojectids = array_column($myprojects, 'id');
        //get only one column from the multi-dimensional array
        $crud->where("`projects`.id IN", "(" . implode(",", $myprojectids) . ")", false); 
        // the false disables escaping

        $crud->set_relation_n_n('assigned_employees', 'project_employees', 'employees', 'project', 'employee', 'name');
        //Only so it also still shows the name of Users assigned

所以基本上projects 这里就像房子,我使用WHERE IN 子句根据我从模型方法中获得的项目过滤记录...

【讨论】:

    【解决方案2】:

    这不是 set_relation_n_n 的预期用途(它将在用户行内的一个字段中显示所有用户房屋)。

    您可以更好地从 tbl_users_houses 列出您想要的内容,使用 $crud->where() 按客户端过滤并通过两个简单的关系与其他表链接。

    【讨论】:

      猜你喜欢
      • 2013-09-02
      • 2014-09-12
      • 2018-10-31
      • 2011-11-08
      • 2017-06-27
      • 2012-06-08
      • 2023-03-14
      • 1970-01-01
      • 2019-01-30
      相关资源
      最近更新 更多