以下代码有效,允许我检索单个记录的所有字段。我在此记录中使用的一个字段是“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'];
非常感谢任何反馈。
答案 0 :(得分:3)
首先,让模型通过将get_propinfo($propid)
的最后一行更改为此
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 *
子句。
是的,打字少的是你的朋友。