Php Codeigniter 中的数组到字符串的转换

Array to string conversion in Php Codeigniter

我正在尝试从数据库中获取数据,基于 、经理和 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 
    ) 
 )

如果有人能提供帮助,我们将不胜感激。

您正在向 getTasksDetails() 函数发送一个 array/object,而该函数应该接收一个字符串。

此行:

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

应该是:

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

但是我会更进一步,将 return 项目经理的功能更改为 return 仅一行而不是结果。

根据我的观察,我怀疑您在该函数上 returning $foo->result(),而不是将其更改为 $foo->row();

然后而不是使用

$project_manager[0]->project_manager 

您只需使用:

$project_manager->project_manager

这个解决方案显然是基于这样一个事实,即您可能只需要一个项目经理的项目详细信息。

如果您想要的是一组项目经理的所有项目详细信息,那么您可能希望将您的项目经理数组调整为一个 id 数组,然后更改您的查询以使用 where in 而不是 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 正常工作,您需要使用仅包含所用数据的数组,而不是包含大量未使用字段的完整多维数组。

现在这段代码可以改进很多,但要解决你的问题这应该足够了。