2013-03-03 6 views
2

간단한 문제입니다.codeigniter가 컨트롤러에서 모델로 변수를 전달합니다.

컨트롤러가 $this->uri->segment(3)을 사용하여 URL에서 표시 할 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"); 



} 

내 처리 할 모델. 는 IT 구문 아래에 따라 작동 모델로 I 하드 코드 배열 경우

모델 - 수동 구문은 다음과 같습니다

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(); 
} 

작은 느낌입니다. 그러나 이것은보기로 출력하기 위해 데이터베이스에서 단일 레코드를 얻는 가장 좋은 방법입니까?

미리 도움을 청하십시오.

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"); 

    } 
} 

다음은 간단하게 호출 할 수 있습니다 :

답변

4

그렇게 할 수있는 가장 좋은 방법은 모델에서

function get_customer_records_to_delete($customerId) 
{ 
    $query = $this->db->get_where('customers', array('id'=>$customerId)); 
    return $query->result(); 
} 

.

+0

감사합니다. 이것은 효과가 있지만 모범 사례입니까?컨트롤러가 값을 가져 와서 값을 직접받는 모델이 아닌 모델에 전달해야한다고 생각했습니다. – Smudger

+0

둘째, 단일 레코드를 반환하는 데 사용할 수있는 최고의 코드 스 니펫입니까? 존 감사합니다. – Smudger

+0

대답은 아니오, 이것이 최선의 방법은 아닙니다. 모범 사례 기법으로 답변을 업데이트하겠습니다. –

2

값을 함수의 인수로 전달해야 함수에 액세스 할 수 있습니다.

예 :

get_customer_records_to_delete($customerid) 
{ 
    // now $customerid is accessible 
    $query = ....; 
    return $……; 
} 
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 
} 
+0

@Smudger 나는 답장하는 데 약간의 시간이 필요하다는 것을 알고 있습니다. D ...하지만 어쨌든 환영합니다 :) – deadlock

0

올드 스레드하지만 대답은 (즉, public $customerid;를) 컨트롤러에 "공개"로 변수를 선언하는 경우에하는 것입니다 그것은 당신의 모델에서 사용할 수 있습니다. 경우에 따라 명시 적으로 인수로 전달하는 것이 더 안전 할 수도 있습니다. 그러나 여러 변수가있는 경우에는 대신 변수를 선언하는 옵션이 유용합니다.

관련 문제