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 正常工作,您需要使用仅包含所用数据的数组,而不是包含大量未使用字段的完整多维数组。
现在这段代码可以改进很多,但要解决你的问题这应该足够了。
我正在尝试从数据库中获取数据,基于 、经理和 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 正常工作,您需要使用仅包含所用数据的数组,而不是包含大量未使用字段的完整多维数组。
现在这段代码可以改进很多,但要解决你的问题这应该足够了。