Преобразование массива в строку в Php Codeigniter

#php #arrays #database #string #codeigniter

#php #массивы #База данных #строка #codeigniter

Вопрос:

Я пытаюсь получить данные из базы данных на основе , manager и project_name, в основном я хочу получить все задачи по всем проектам конкретного менеджера, я успешно смог получить все проекты, но при попытке получить задачи по всем этим проектам возникает ошибка:введите описание изображения здесь

Вот контроллер

   function index()
{
  // print_r($_REQUEST); 
  // die;
  $user_id =  $this->session->userdata('manager');
  $project_manager = $this->task_model->getmanager($user_id);
  // print_r($project_manager); 
  //   die;
  $project_name = $this->task_model->getProjectDetails($project_manager);
  //  print_r($project_name); 
  //  die;

 $data['tasks'] = $this->task_model->getTasksDetails($project_name); //error on this line
  // print_r($data); 
  // die;
  

Вот модель:

  function getmanager($user_id)
{
  $first_name =$this->db->select('first_name')->from('user_login')->where(array('id' => $user_id,'delete_flag'=>0))->get()->row();
 return  $first_name->first_name; 

} 
function getProjectDetails($project_manager)
{
//table  (projects)
 $delete_flag=1;
 $project_name =$this->db->get_where('projects',array('delete_flag!='=>$delete_flag,'project_manager'=>$project_manager))->result();
return  $project_name;

}


function getTasksDetails($project_name)
{
 $this->db->select('*,tasks.id as id, tasks.status as status');
   $this->db->join('user_login', 'tasks.assign_to = user_login.id');
   $this->db->where('tasks.delete_flag','0');
   $this->db->where('tasks.project_name' ,$project_name);
   return $this->db->get('tasks')->result(); //error on this line
  // return   $tasks->tasks;
} 
  

И запуск

  print_r($project_name); 
    die;
  

Результаты:

 Array ( 
    [0] => stdClass Object ( 
      [id] => 4 
      [delete_flag] => 0 
      [project_name] => a test 
      [client_name] => a 
      [company] => AIM Solutions Sdb Bhd 
      [project_manager] => Ravi 
      [support_staff] => elango,test2 
      [flag] => 3 
    ) 
    [1] => stdClass Object ( 
      [id] => 5 
      [delete_flag] => 0 
      [project_name] => test project 
      [client_name] => test 
      [company] => AIM Solutions Sdb Bhd 
      [project_manager] => Ravi 
      [support_staff] => elango,test2,mani 
      [flag] => 0 
    ) 
 )
  

был бы признателен, если кто-нибудь может помочь.

Комментарии:

1. вы не можете передавать array данные where , вы можете передать массив идентификаторов в where_in

Ответ №1:

Вы отправляете массив / объект в свою функцию getTasksDetails(), когда эта функция должна получить строку.

Эта строка здесь:

 $project_name = $this->project_model->getProjectDetails($project_manager);
  

Должно быть:

 $project_name = $this->project_model->getProjectDetails($project_manager[0]->project_manager);
  

Однако я бы пошел еще дальше и изменил вашу функцию, которая возвращает менеджеру проекта, чтобы возвращать только одну строку вместо результата.

Из того, что я вижу, я подозреваю, что вы возвращаете $foo-> result() для этой функции, вместо этого измените ее на $foo-> row();

Затем вместо использования

 $project_manager[0]->project_manager 
  

вы бы просто использовали:

 $project_manager->project_manager
  

Это решение, очевидно, основано на том факте, что вам могут потребоваться сведения о проектах только для одного менеджера проекта.

Если вам нужны все сведения о проекте для группы менеджеров проектов, тогда вы можете настроить свой массив менеджеров проектов так, чтобы он был всего лишь одним массивом идентификаторов, а затем изменить свой запрос на использование where вместо where . Поэтому я просто предполагаю, что ваша функция getmanager, вероятно, неверна, поскольку вы отправляете user_id и получаете более одного результата.

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

 // Controller Function
function index()
{
    $user_id =  $this->session->userdata('manager');
    // return the project manager name
    $project_manager = $this->task_model->getmanager($user_id);
    // Return all the projects for a given project manager
    $project_manager_projects = $this->task_model->getProjectDetails($project_manager); 
    // Get all tasks in a set of projects
    $data['tasks'] = $this->task_model->getTasksDetails($project_manager_projects);
}


// Model functions
function getmanager($user_id)
{
    $first_name =$this->db->select('first_name')
        ->from('user_login')
        ->where(array('id' => $user_id,'delete_flag'=>0))
        ->get()
        ->row();
    return  $first_name->first_name; 
} 

function getProjectDetails($project_manager)
{
    $delete_flag=1;
    $project_name = $this->db->get_where('projects',array(
        'delete_flag != ' => $delete_flag,
        'project_manager' => $project_manager)
    )->result();
    return  $project_name;
}


function getTasksDetails($project_manager_projects)
{
    $projects = array();
    foreach($project_manager_projects as $project) {
        $projects[] = $project->project_name;
    }
    if (empty($projects)) {
        return array();
    }
    return $this->db->select('*,tasks.id as id, tasks.status as status')
        ->join('user_login', 'tasks.assign_to = user_login.id')
        ->where('tasks.delete_flag','0')
        ->where_in('tasks.project_name' ,$projects)
        ->get('tasks')
        ->result(); 
} 
  

Чтобы ваш where_in работал, вам нужно использовать массив только с теми данными, которые вы используете, а не весь многомерный массив с большим количеством неиспользуемых полей.

Теперь этот код можно значительно улучшить, но для решения вашего вопроса этого должно быть достаточно.

Комментарии:

1. спасибо за ваше объяснение, но я все еще не смог устранить ошибку, я обновил код и добавил другие функции, был бы признателен, если бы вы могли взглянуть

2. ваша функция getProjectDetails возвращает много проектов вместо одного, вы этого хотите? Ваша цель здесь — получить все проекты от одного менеджера проектов и все задачи для данных проектов?

3. да, моя цель — получить все проекты от одного менеджера проектов, а затем все задачи для данных проектов

4. так что да, я хочу вернуть столько, сколько проектов от менеджера

5. хорошо, тогда я бы поступил немного по-другому. Я изменю свой ответ.