Невозможно получить все данные в codeigniter - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть следующий контроллер, где я получаю записи, основанные на имени пользователя. его работа успешно, но я хочу сделать администратора, который получает все пользовательские данные. мой разум не понимает, как это сделать. Пожалуйста, помогите мне. Мой метод получения пользовательских данных следующий.

public function get_posts($slug = FALSE, $limit = FALSE, $offset = FALSE){
    if($limit){
        $this->db->limit($limit, $offset);
    }
    $user_id = $this->session->userdata['user_id'];
    if($slug === FALSE){
        $this->db->select('*');
        $this->db->from('posts');

        $this->db->order_by('posts.id', 'DESC');
        $this->db->join('users', 'users.id= posts.user_id');
        $this->db->where('users.id',$user_id);
        $query = $this->db->get();
        return $query->result_array();
    }

    $query = $this->db->get_where('posts', array('slug' => $slug));
    return $query->row_array();
}

Ответы [ 3 ]

0 голосов
/ 24 апреля 2018

Если у вас нет роли пользователя, сохраненной в сеансе, вам следует снова извлечь данные текущего пользователя:

public function get_posts($slug = FALSE, $limit = FALSE, $offset = FALSE){
    if($limit){
        $this->db->limit($limit, $offset);
    }

    $user_id = $this->session->userdata['user_id'];

    // Fetch current user from db
    $this->db->select('*');
    $this->db->from('users');
    $this->db->where('users.id',$user_id);
    $query = $this->db->get();
    $user = $query->row_array();

    if($slug === FALSE){
        $this->db->select('*');
        $this->db->from('posts');

        $this->db->order_by('posts.id', 'DESC');
        $this->db->join('users', 'users.id = posts.user_id');

        if(!$user['is_admin']){  // Assuming that you would be storing if user is admin in database in a 'is_admin' field
            $this->db->where('users.id',$user_id);
        }

        $query = $this->db->get();
        return $query->result_array();
    }

    $query = $this->db->get_where('posts', array('slug' => $slug));
    return $query->row_array();
}
0 голосов
/ 25 апреля 2018

попробуйте это,

public function get_posts($slug = FALSE, $limit = FALSE, $offset = FALSE, $is_admin = FALSE){
    $this->db->select('*');
    $this->db->from('posts');        
    if(!$is_admin){
        $this->db->join('users', 'users.id = posts.user_id');
        $this->db->where('users.id', $this->session->userdata('user_id'));
    }
    if($slug){ $this->db->where('posts.slug', $slug); }        
    if($limit){ $this->db->limit($limit, $offset); }
    $this->db->order_by('posts.id', 'DESC');
    $query = $this->db->get();        
    return ($query->num_rows() > 1) ? $query->result_array() : $query->row_array();
}

ИСПОЛЬЗОВАНИЕ

// In USER (same like you are calling now)
$posts = get_posts();

// In ADMIN
$posts = get_posts(false, false, false, true);
0 голосов
/ 24 апреля 2018

Внесите следующие изменения: (Внимательно прочитайте комментарии.)

public function get_posts($slug = FALSE, $limit = FALSE, $offset = FALSE){
    if($limit){
        $this->db->limit($limit, $offset);
    }
    $user_id = $this->session->userdata['user_id'];
    $user_type = $this->session->userdata['userType'];  // Assuming that you would be storing user role in session with 'userType' key
    if($slug === FALSE){
        $this->db->select('*');
        $this->db->from('posts');

        $this->db->order_by('posts.id', 'DESC');
        $this->db->join('users', 'users.id= posts.user_id');
        if($user_type != 'admin'){  // Then fetch all post of logged in user. Otherwise all post of all the users will be fetched.
            $this->db->where('users.id',$user_id);
        }
        $query = $this->db->get();
        return $query->result_array();
    }

        $query = $this->db->get_where('posts', array('slug' => $slug));
        return $query->row_array();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...