2016-09-30 3 views
0

처음으로 codeigniter를 사용하고 있습니다. 저는 MVC에 익숙하지만 PHP가 아닌 .net 만 사용합니다.codeigniter - 관계형 테이블

그래서 '카테고리'테이블, '국가'테이블 및 '카테고리 - 국가'테이블이 있습니다. 첫 번째 2 개의 테이블에 'id'와 'name'만 있고 세 번째 테이블에 'country_id'와 'category_id'가 있다고 가정 해 보겠습니다. 하나의 카테고리에는 여러 국가가 할당 될 수 있습니다.

모델, 뷰 및 컨트롤러를 모두 작성하고 카테고리를 편집 할 준비가되었습니다.

function get_category_by_id($id) 
{ 
    $query = $this->db->get_where('categories',array('id'=>$id)); 
    if($query->num_rows()<=0) 
    { 
     echo 'Invalid category id';die; 
    } 
    else 
    { 
     return $query->row(); 
    } 
} 

보기 :

<form class="form-horizontal" id="addcategory" action="<?php echo site_url('admin/category/updatecategory');?>" method="post"> 
    <input type="hidden" name="id" value="<?php echo $post->id;?>"/> 
    <div class="form-group"> 
     <label class="col-sm-3 col-md-3 control-label"><?php echo lang_key_admin('name');?>:</label> 
     <div class="col-sm-4 col-md-4 controls"> 
      <input type="text" name="name" value="<?php echo $post->name;?>" placeholder="<?php echo lang_key_admin('type_something');?>" class="form-control input-sm" > 
      <?php echo form_error('title'); ?> 
     </div> 
    </div> 
</form> 

컨트롤러 :

public function edit($id='') 
{ 
    $value['post'] = $this->category_model->get_category_by_id($id); 
    $data['title'] = lang_key_admin('edit_category'); 
    $data['content'] = load_admin_view('categories/editcategory_view',$value,TRUE); 
    load_admin_view('template/template_view',$data);   
} 

public function updatecategory() 
{ 
    $this->form_validation->set_rules('name', lang_key_admin('name'), 'required'); 

    if ($this->form_validation->run() == FALSE) 
    { 
     $id = $this->input->post('id'); 
     $this->editcategory($id); 
    } 
    else 
    { 
     $id = $this->input->post('id'); 

     $data     = array();   
     $data['name']   = $this->input->post('name');   

      $this->category_model->update_category($data,$id); 
      $this->session->set_flashdata('msg', '<div class="alert alert-success">'.lang_key_admin('data_updated').'</div>'); 

     redirect(site_url('admin/category/edit/'.$id));  
    } 
} 

편집 functionallity을

모델

이제 해당 뷰에 선택 목록 (다중 선택)을 추가하여 해당 범주에 할당 할 국가를 선택하고 세 번째 테이블에 관계를 저장합니다. 내가 어떻게 해? 목록에있는 모든 국가를 보여주고 원하는 국가를 선택할 수 있어야합니다. 또한 페이지가로드 될 때 이미 목록에 선택된 국가가 목록에 선택되기를 원합니다.

답변

1

나는 코드를 작성하지 않지만 도움이 될만한 지침을 제공 할 것입니다.

Codeigniter의 Form Helper.에 익숙해지면 작업이 더 쉬워집니다. 특히 양식의 다중 선택 필드를 만들려면 도우미의 form_multiselect() 함수를 사용하십시오.

두 개의 결과 집합을 모으기 위해 두 가지 모델 함수가 필요합니다. 하나는 전체 국가 목록을 얻고 다른 하나는 세 번째 테이블의 특정 범주와 일치하는 국가 ID 배열을 얻는 것입니다 (표의 이름은 crossref) . 첫 번째는 다중 선택을 채우고 두 번째는 다중 선택에서 현재 선택된 국가 집합을 나타내는 데 사용됩니다.

이러한 결과는 양식 컨트롤의 모든 속성 (부트 스트랩 클래스가 맞습니까?)과 마찬가지로 쉽게 form_multiselect()으로 전달됩니다.

양식에서 게시 된 다중 선택을 처리하는 방법에는 여러 가지가 있습니다. 이 tutorial이 도움이 될 수 있습니다. 선택한 국가를 파싱 한 후에는 crossref에 삽입하거나 업데이트하려면 모델 함수가 필요합니다.

귀하의 질문에 대한 답변과는 관련이 없지만 고려해 볼만한 사항이 있습니다. 귀하의 모델은 echo을 사용하는데 이는 아마 MVC 모범 사례에서 벗어난 것입니다. 일반적으로 컨트롤러는 시작되는 처리 결과에 따라 표시되는 내용에 대한 결정자 여야합니다. 따라서 모델에서 echodie 대신이 작업을 수행해야합니다.

function get_category_by_id($id) 
{ 
    $query = $this->db->get_where('categories',array('id'=>$id)); 
    return $query->num_rows() > 0) ? $query->row() : NULL; 
} 

결과가 없으면 NULL을 반환합니다.컨트롤러는 다음

public function edit($id='') 
{ 
    $category = $this->category_model->get_category_by_id($id); 
    if(isset($category)) 
    { 
     $value['post'] = $category; 
     $data['title'] = lang_key_admin('edit_category'); 
     $data['content'] = load_admin_view('categories/editcategory_view',$value,TRUE); 
     load_admin_view('template/template_view',$data); 
    } 
    else 
    { 
     //handle the error (an "error" view?) 
    } 
} 

는 PHP 함수 exit 또는 die이 CodeIgniter를 사용하지 호출을 수행 확인하고 모델의 반환에 반응해야합니다!

왜? 프레임 워크는 컨트롤러가 실행을 마칠 때까지 브라우저에 아무 것도 출력하지 않습니다. 이러한 함수 중 하나를 호출하면 프레임 워크가 단락되고 코드에서 echo 'Invalid category id';에 의해 전송 된 메시지가 표시되지 않습니다. CI는 컨트롤러가 끝난 후에도 다른 일을합니다.

개발 중에는 exit 또는 die을 사용하는 것이 좋지만 프로덕션 사이트에서는 사용할 수 없습니다.

+0

팁 주셔서 감사합니다. 그들은 나에게 길을 보여 줬어. 최대한 빨리 솔루션을 게시하겠습니다. – Hahn86

관련 문제