我认为的简单问题。
我的控制器正在使用$this->uri->segment(3)
从网址显示if。这将始终是单个值。我将它放在一个数组中以传递给模型:
$customerid = array(
'id' => $this->uri->segment(3)
);
控制器语法如下:
function confirm_delete_customer()
{
$data['title']="Confirm Customer Deletion";
$customerid=array(
'id'=>$this->uri->segment(3)
);
//query model to get data results for form
$data=array();
if($query=$this->model_master_data->get_customer_records_to_delete()){
$data['records']=$query;
$this->load->view("master_data/view_master_data_header",$data);
$this->load->view("master_data/view_master_data_nav");
$this->load->view("master_data/view_content_master_data_confirm_customer_deletion",$data);
$this->load->view("master_data/view_master_data_footer");
}
然后我尝试访问此数组值并将其传递给我的模型进行处理。如果我将数组硬编码到模型中,它的工作方式如下:
模型 - 手动语法是:
function get_customer_records_to_delete()
{
$query = $this->db->get_where('customers', array('id'=>43));
return $query->result();
}
如果我尝试用我的控制器中的数组替换它,则会失败并显示错误:
Undefined variable: customerid
我想要工作的模型的想法:
function get_customer_records_to_delete()
{
$query = $this->db->get_where('customers', $customerid);
return $query->result();
}
我觉得它很小。但这是从数据库中获取单个记录以输出到视图的最佳方法吗?
提前感谢您的帮助。
答案 0 :(得分:4)
最好的方法是:
function confirm_delete_customer()
{
$data=array();
$data['title']="Confirm Customer Deletion";
$customerId = $this->uri->segment(3);
//Prevent SQL injections
if(!is_numeric($customerId) || empty($customerId)) {
show_error("Bad Request");
}
$query = $this->model_master_data->get_customer_records_to_delete($customerId);
if ($query){
$data['records']=$query;
$this->load->view("master_data/view_master_data_header",$data);
$this->load->view("master_data/view_master_data_nav");
$this->load->view("master_data/view_content_master_data_confirm_customer_deletion",$data);
$this->load->view("master_data/view_master_data_footer");
}
}
然后你可以简单地打电话:
function get_customer_records_to_delete($customerId)
{
$query = $this->db->get_where('customers', array('id'=>$customerId));
return $query->result();
}
在你的模特身上。
答案 1 :(得分:2)
您需要将值作为参数传递给函数,以便它可以访问它。
例如:
get_customer_records_to_delete($customerid)
{
// now $customerid is accessible
$query = ....;
return $……;
}
答案 2 :(得分:2)
你应该严重依赖功能参数。从控制器获取客户ID并将其发送到模型。此外,您可以使用row()
从数据库中获取单个结果。
<强>控制器强>:
function confirm_delete_customer(){
$data['title']="Confirm Customer Deletion";
$customerid=$this->uri->segment(3);
//query model to get data results for form
$data=array();
if($query=$this->model_master_data->get_customer_records_to_delete( $customerid)) //you are sending customer id as a parameter here
$data['records']=$query;
$this->load->view("master_data/view_master_data_header",$data);
$this->load->view("master_data/view_master_data_nav");
$this->load->view("master_data/view_content_master_data_confirm_customer_deletion",$data);
$this->load->view("master_data/view_master_data_footer");
}}
<强>模型强>
function get_customer_records_to_delete($customerid)
{
$query = $this->db->get_where('customers', array("id"=>$customerid)); //you are using the customer id sent from the controller here
return $query->row(); //this will return a single row
}
答案 3 :(得分:0)
旧线程,但答案是在控制器中将变量声明为“public”(即public $customerid;
),在这种情况下,它将可供您的模型使用。在某些情况下,显式传递作为参数可能更安全。但是,当你有几个变量时,可以选择声明它们。