CI 묻고 답하기

제목 core model 두 종류의 model로 분개시킬려고 합니다.
글쓴이 엠제이 작성시각 2015/10/21 14:59:01
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 13938   RSS
개념으로 보자면
CI_Model -> MY_Model -> MY_View_model OR MY_Data_model -> 일반 모델 (User_view_model or User_data_model) 로 분개시킬려고 합니다.

1.  코어에 등록시킬 방법은 system에 접근해야 하는건가요? (정말 하고 싶지 않습니다ㅠㅠ)
   - MY_Model 을 만들지 않고 CI_Model을 상속받은 CI_View_model , CI_Data_model을 바로 만들어서 컨트롤러에서
    사용할 수 있는 방법은 없는가요? 

2. MY_Model을 일단 만들고 (CI_Model 상속만 받고)
   MY_View_model 과 MY_Data_model 은 Model 폴더에 만들고 
   일반 모델들은 include MY_View_model or MY_Data_model 하는 방법에 대해서는 어떻게 생각하시나요?

글을 좀 못 써서....ㅠ 질문에 이상한 부분이 있다면 빠른 댓글로 답장하겠습니다 ㅠ

하...쉽게 설명하자면...ㅎㅎㅎ

일반 모델들은 두가지의 모델로 만들어질 수 있는데 select 관련된 view model 과 
insert update delete 함수가 있는 data_model 로 만들어 질 수 있습니다.
view_model 과 data_model은 CI_Model을 상속받은 상태입니다. 파일 배치와 상속방법에 대해 서술하시오.

본격 입사문제 스타일! 이렇게 질문하는 게 왜 더 편하게 글이 써질까요? ㅠㅠ 







 
 다음글 지금 셋팅된 ci 버젼이 몃인지 체크를 할려고 하는데 ... (2)
 이전글 헤더파일에 데이터 넣을 때 질문입니다. (2)

댓글

한대승(불의회상) / 2015/10/21 15:13:04 / 추천 0
질문을 이해하지 못했어요. ^^;;;

필요한 class들을 system을 건들지 않고 정의 하려면 application/core/MY_Model.php 에 작성하면 됩니다.
엠제이 / 2015/10/21 15:21:13 / 추천 0
$this->load->view_model('user_view_model');
 $recent_sign_up_user = $this->user_view_model->get_view('recent_sign_up_user');
 
 $user_data = array();
 $this->load->data_model('user_data_model');
 $this->user_data_model->insert($user_data); // insert, update, delete 함수는 data_model에서 상속받음.

이런 식으로 컨트롤러에서 사용하고 싶은데..ㅋㅋ 설명이 참..어렵네요.. 
엠제이 / 2015/10/21 15:28:01 / 추천 0
load->database();
    }
 
}

class View_model extends FX_Model {
 public function __construct() {
        parent::__construct();
        $this->load->database();
    }
}

class Data_model extends FX_Model {
 public function __construct() {
        parent::__construct();
        $this->load->database();
    }
}

?>

이 방법을 써도 괜찮은 걸까요?? 


class User_view_model extends View_model {
    public function __construct() {
        parent::__construct();
        $this->load->database();
    }
    
    public function test() {
        //$this->db->trans_begin();
        $this->db->set('user_id', 'test');
        $this->db->insert('user');
        $value = $this->test2();
        return $value;
    }
    
    public function test2() {
        return 'a';
    }
}
?>

정상 작동은 합니다 ㅎㅎㅎ
한대승(불의회상) / 2015/10/21 15:28:16 / 추천 0
모든 모델은 $this->load->model() 을 사용해야 합니다.
$this->load->model('user_view_model');
$this->load->model('user_data_model');
user_view_model 이나 user_data_model 은 클래스 명이므로 로드 클래스를 새로 확장하는것은 의미가 없습니다.
각 class가 어떤 class를 상속 받았는지가 중요한거죠.
 
class User_view_model extends MY_View_model {
}

class User_data_model extends MY_Data_model {
}
이렇게 선언하고 $this->load->model()로 로드 하면 됩니다.


 
엠제이 / 2015/10/21 15:42:27 / 추천 0
접두어는 FX이고요.

FX_Model은 이렇게 구현

<?php
class FX_Model extends CI_Model {
 public function __construct() {
        parent::__construct();
        $this->load->database();
    }
 
}

abstract class View_model extends FX_Model {
 
 abstract protected function get_view($view_name, $where_array, $order_array, $offset_limit_array);
 
 public function __construct() {
        parent::__construct();
        $this->load->database();
    }
}

abstract class Data_model extends FX_Model {
 
 abstract protected function insert($data_array);
 abstract protected function update($where_array, $data_array);
 abstract protected function delete($where_array);
  
 public function __construct() {
        parent::__construct();
        $this->load->database();
    }
}

?>


User_view_model.php 는

<?php
class User_view_model extends View_model {
 public function __construct() {
        parent::__construct();
        $this->load->database();
    }
 
 public function get_view($view_name, $where_array, $order_array, $offset_limit_array) {
  //DB 모든 select 부분을 view 로 구현해둠
 }
}
?>

User 컨트롤러는 

<?php
class User extends CI_Controller {
    public function __construct() {
        parent::__construct();
        $this->load->helper('url');
        //$this->load->library('session');
    }
 
 public function index() {
  $this->load->model('user_view_model');
  $user_list = $this->user_view_model->get_view('user', null, null, null);
 }
 
}

이렇게 만들어봤어요. 
그냥 딱히 이유는 없지만..ㅠ 뭔가 작업하기 좋지 않을까 해서 이런식으로 구성해봤어요 ㅠ

한대승(불의회상) / 2015/10/21 15:51:56 / 추천 0
FX_model 에서 $this->load->database()를 호출 했으니 확장된 View_model 이나 Data_model 에서는 호출 하지 않아도 됩니다.
엠제이 / 2015/10/21 16:03:22 / 추천 0
//불의회상
아하. 감사합니다