CodeIgniter - 无法从记录中提取字段

时间:2017-10-27 21:08:23

标签: codeigniter

以下代码有效,允许我检索单个记录的所有字段。我在此记录中使用的一个字段是“name”,但要在视图页面上访问它,我必须放置两行代码以从返回的记录中提取“name”字段。我希望能够在控制器中提取“名称”字段并传递给视图。我确信有一个简单的解决方案,因为数据已经成功检索。

MODEL - 执行select all并返回单个记录

// Select a record (all columns) from 'proposal_info' table per prop ID
public function get_propinfo($propid) {
  // Build query
  $this->db->select('*');
  $this->db->from('proposal_info P'); 
  $this->db->join('status', 'P.status = status.id');
  $this->db->join('regions', 'P.region = regions.id');
  $this->db->join('usa_states', 'P.state_id = usa_states.id');
  $this->db->join('type', 'P.type = type.id');
  $this->db->where('P.id', $propid);
  return $this->db->get();
}

CONTROLLER - $ data ['propinfo'] = $ this-> Propinfo_model-> get_propinfo($ _ SESSION ['session_propid']); line是我从模型中的查询中检索记录的位置。 'name'字段包含在$ data ['propinfo']中,但如何在控制器中检索它?好像它会

public function summary() {
  $this->load->model('Propinfo_model');
  $data['page'] = "Project Summary";
  $data['allprops'] = $this->Propinfo_model->get_allprops($_SESSION['userid_db']); // required for LH nav proj list 
  $data['propinfo'] = $this->Propinfo_model->get_propinfo($_SESSION['session_propid']); // query for proposal info
  $data['announcements'] = $this->Propinfo_model->get_announcements($_SESSION['session_propid']); // query for announcements
  $this->load->view('templates/bp_header_view', $data);
  $this->load->view('templates/bp_nav_view', $data); 
  $this->load->view('summary_view', $data); // page content 
  $this->load->view('templates/bp_footer_view', $data);
  $this->load->view('templates/bp_endjs_view', $data);
}

视图 - 不幸的是,这是我知道如何获取'name'字段的唯一方法。这个问题,但我想在控制器上做这个,而不是视图。

// Want to remove this code from the view and have 'name' passed from controller
$row = $propinfo->row_array();
$proposal_name = $row['name'];

非常感谢任何反馈。

1 个答案:

答案 0 :(得分:3)

首先,让模型通过将get_propinfo($propid)的最后一行更改为此

来返回row_array
return $this->db->get()->row_array();

然后在视图中,您将获得“名称”

echo $propinfo['name'];

如果你想在控制器中获得“名字”,那么

$name = $data['propinfo']['name'];

与你的问题无关,但我无法自拔。如果你这样做,你的视图加载可能会更清晰。

$this->load
     ->view('templates/bp_header_view', $data)
     ->view('templates/bp_nav_view')
     ->view('summary_view')
     ->view('templates/bp_footer_view')
     ->view('templates/bp_endjs_view');

方法链将更快地执行,并且更少输入。

无需在每个视图加载上传递$data。将数据发送到load->view后,它会被缓存,并且对后续load->view次调用可见。如果你继续传递它,你继续运行一堆代码,用它已经拥有的相同值覆盖缓存。如果您实际添加或更改视图所需的数据,则只需传递一些数据。

正如@ourmandave指出的那样,方法链也适用于db方法。在模型中试试这个。

return $this->db
   ->join('status', 'P.status = status.id')
   ->join('regions', 'P.region = regions.id')
   ->join('usa_states', 'P.state_id = usa_states.id')
   ->join('type', 'P.type = type.id')
   ->where('P.id', $propid)
   ->get('proposal_info P') 
   ->row_array();

请注意删除select('*')from('proposal_info P')。表名已移至get()电话。

在没有db->get('optional table name')调用的情况下使用select()时,生成的查询语句将具有SELECT *子句。

是的,打字少的是你的朋友。