CodeIgniter MVC并在一个函数中更新两个不同的表

时间:2012-04-03 11:05:18

标签: php codeigniter activerecord

我有一个基于JavaScript的页面,其中网格显示从数据库中获取的注册用户的所有数据。在UI中,我还有一个名为“groups”的列,显示每个用户都参与的组,但是这个信息是使用另外两个附加表 - 'groups'以'id'和'group_name'作为列,以及一个表'users_groups',其'user_id'和'group_id'作为与'users'关联的外键的列'组'表。

问题在于,当您单击从UI网格中编辑任何用户时,会发布一个发布JSON的AJAX,其中包含用户的信息,其中包含 'groups'列实际上不属于'users'表的一部分。所以我有这个:

$data = json_decode($this->input->post('data'), true);

最初(当尚未添加组时)在此转换:

$data = array(
         'id' => $data['id'],
         'email' => $data['email'],
         'firstname' => $data['firstname'],
         'lastname' => $data['lastname'],
         'usertype' => $data['usertype']
          );

然后解析为名为'mUsers'的模型,其中是更新函数:

$query = $this->mUsers->update($data);

从现在开始,模型非常简单,因为只有一个表:

public function update($data)
    {
        $this->db->where('id', $data['id']);
        $query = $this->db->update('users', $data);

        return true;
    }

但现在我必须更新另一个表--'users_groups',我正在考虑我的选项。是否可以在$ data数组中添加另一个记录:

'groups' => $data['groups']

尝试在一个函数中实现所有逻辑(如果这甚至可能,我找不到信息,如果我可以在一个函数中有两个不同的活动记录查询)或我想到的第二件事是在解码JSON之后做类似的事情:

$dataGroups = array(
    'groups' => $data['groups'] //adding groups data to be fetched for update   
                );

然后将数据解析为新函数,如:

$q = $this->mUsers->updateGroups($dataGroups);

在这种情况下,更好的方法是什么?

由于 Leron

1 个答案:

答案 0 :(得分:1)

同时发挥作用。并在必要时调用它们,您也可以仅调用usergroup功能

//this function update all user data including group
public function updateUser($data, $changeGroup = true)
{
    $this->db->where('id', $data['id']);
    $query = $this->db->update('users', $data);
     if($changeGroup) {
       $this->updateUserGroup($data['id'], $data['groups']);
    }
}

//Update user group
public function updateUserGroup($userid, $usergroups)
{
   //Update user groups
}