codeigniter отображает все проекты вместе с пользователями на нем (есть ли у него пользователи или нет)

0

Я новичок в php, а также codeigniter. В основном я хочу, чтобы все проекты в таблице проекта отображались вместе с пользователями в этом проекте. ** В одном проекте может быть несколько пользователей или пользователь еще не назначен этому проекту. ** Поэтому я попытался реализовать его, но я не получаю желаемый результат. Пожалуйста, помогите мне !! Ниже приведен код:

Модель:

public function get_projects()
{
    $sql = "SELECT * FROM 'project'";
    $query = $this->db->query($sql);
    return $query->result();

}

public function list_projects()
{

    $project_result = $this->get_projects();
    $sql = "select user_fname , project_id , user_id from user";
    $query = $this->db->query($sql);
    $user_result = $query->result();

    $result_arr = array();
    $proj_id_arr = array();

    foreach($project_result as $curr_proj):

        if(in_array($curr_proj->project_id, $proj_id_arr)){
            $result_arr[$curr_proj->project_name][] = array( 
                                                'project_id '   => $curr_proj->project_id,
                                                'project_name'  => $curr_proj->project_name
                                                );

        }else{

            $result_arr[$curr_proj->project_name][] = array( 
                                                'project_id '   => $curr_proj->project_id,
                                                'project_name'  => $curr_proj->project_name
                                                );
        }

        foreach($user_result as $curr_user):
            if($curr_user->project_id == $curr_proj->project_id):

                $result_arr[$curr_proj->project_name][] = array(
                                                            'project_id '   => $curr_proj->project_id,
                                                            'project_name'  => $curr_proj->project_name,
                                                            'user'          => $curr_user->user_fname,
                                                            'user_id'       => $curr_user->user_id
                                                            );
                $proj_id_arr[] = $curr_proj->project_id;
            endif;


        endforeach;

    endforeach;

    echo '<pre>';
    print_r($result_arr);exit;

    return $data;
}

контроллер:

    function index() {

    $this->check_session();
    $data['main_content'] = 'admin/project/list';
    $data['lists']=$this->project_model->list_projects();   
    $data['projects']=$this->project_model->get_projects();
    $data['result'] = false;
    $this->load->view('common/admin_template', $data);
    }

Это результат моего кода:

Array
(
[project 1 ] => Array
    (
        [0] => Array
            (
                [project_id ] => 1
                [project_name] => project 1 
            )

        [1] => Array
            (
                [project_id ] => 1
                [project_name] => project 1 
                [user] => user1
                [user_id] => 1
            )

        [2] => Array
            (
                [project_id ] => 1
                [project_name] => project 1 
                [user] => user2
                [user_id] => 2
            )

    )

[project 2] => Array
    (
        [0] => Array
            (
                [project_id ] => 19
                [project_name] => project 2
            )

        [1] => Array
            (
                [project_id ] => 19
                [project_name] => project 2
                [user] => user3
                [user_id] => 3
            )

    )

[project 3] => Array
    (
        [0] => Array
            (
                [project_id ] => 20
                [project_name] => project 3
            )

    )

[project 4] => Array
    (
        [0] => Array
            (
                [project_id ] => 21
                [project_name] => project 4
            )

    )

 )

Существуют две таблицы: один из проектов, состоящий из project_id, project_description, а другой - с user_id, user_fname, project_id (внешний ключ)

  • 0
    Можем ли мы увидеть диаграмму взаимоотношений вашей сущности или краткое описание соответствующих таблиц, отредактированные в вашем вопросе? Я так понимаю, проект может иметь несколько пользователей, но у пользователя может быть только один проект?
  • 0
    использовать левое соединение или правое соединение
Теги:
codeigniter

1 ответ

0
Лучший ответ

Прежде всего, вы используете цикл внутри цикла. Это не очень хорошая практика. Используйте это, если вы хотите получить только проект, в котором есть хотя бы один пользователь. Затем установите $ showOnlyHaveUser = true. '

public function list_projects()
{

$showOnlyHaveUser = FALSE;

$project_result = $this->get_projects();
$sql = "select user_fname , project_id , user_id from user";
$query = $this->db->query($sql);
$user_result = $query->result();
$result_arr = array();
$proj_id_arr = array();

$projects = array();

foreach ($project_result as $project) :
    $projects[$project->project_id] = $project;
    if($showOnlyHaveUser==FALSE)
        $result_arr[$project->project_name] = array();
endforeach;

foreach ($user_result as $user) :
    $project_name = isset($projects[$user->project_id]) ? $projects[$user->project_id]->project_name : "";
    $project_id = isset($projects[$user->project_id]) ? $projects[$user->project_id]->project_id : "";
    if(!isset($result_arr[$project_name])):
        $result_arr[$project_name] = array();
    endif;
    $temp = array(
        'project_id '   => $project_id ,
        'project_name'  => $project_name,
        'user'          => $user->user_fname,
        'user_id'       => $user->user_id
    );
    $result_arr[$project_name][] = $temp;
endforeach;
echo '<pre>';
print_r($result_arr);exit;

return $data;
}'
  • 0
    Спасибо Нитин за исправление меня ..
  • 0
    Приведенный вами код показывает только проекты, в которых есть пользователи. Если в проекте нет пользователя, то он не показывает этот проект. Я хочу, чтобы во всех проектах был пользователь или нет.
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню