TIP게시판

제목 Ci4 모델 로딩 샘플
글쓴이 한대승(불의회상) 작성시각 2016/07/21 12:15:49
댓글 : 3 추천 : 0 스크랩 : 1 조회수 : 15747   RSS
한대승(불의회상)

이번에 새로이 발표된 CI4가 기존 버젼들과 모델, 라이브러리 로딩 개념이 바꼈네요.

메뉴얼을 살펴봐도 모델, 라이브러리를 로드 하는 부분에 대해 언급이 없어 어리둥절 했습니다.

모델, 라이브러리, 코어의 확장등은 psr4에 의거한 autoload 개념으로 전환 된거 같습니다.

CI4 테스트 하시면서 도움이 되시라고 제가 사용 했던 샘플 등록 해 둡니다.

user.sql을 제외한 나머지 폴더들은 application 폴더 아래에 위치 합니다.

 

  • user.sql
    • CREATE TABLE `user` (
      	`id` INT(11) NOT NULL AUTO_INCREMENT,
      	`name` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
      	`created_at` DATETIME NULL DEFAULT NULL,
      	`updated_at` DATETIME NULL DEFAULT NULL,
      	`deleted` INT(11) NULL DEFAULT '0',
      	PRIMARY KEY (`id`)
      )

       

  • config/database.php
    • 	
      	public $default = [
      		'DSN'          => '',
      		'hostname'     => 'localhost',
      		'username'     => 'user', // db user 계정
      		'password'     => 'password', // db user 암호
      		'database'     => 'mydb', // db명
      		'DBDriver'     => 'MySQLi', // db 드라이버명
      		'DBPrefix'     => '',
      		'pConnect'     => false,
      		'DBDebug'     => (ENVIRONMENT !== 'production'),
      		'cacheOn'     => false,
      		'cacheDir'     => '',
      		'charset'      => 'utf8',
      		'DBCollat'     => 'utf8_general_ci',
      		'swapPre'      => '',
      		'encrypt'      => false,
      		'compress'     => false,
      		'strictOn'     => false,
      		'failover'     => [],
      		'saveQueries' => true,
      	];

       

  • config/autoload.php
    • public function __construct()
      	{
      		parent::__construct();
      
      		$psr4 = [
      			'Config'                     => APPPATH.'Config',
      			'Models\Hoksi'				 => APPPATH.'Models/Hoksi/', // 추가한 네임스페이스
      			APP_NAMESPACE.'\Controllers' => APPPATH.'Controllers',
      			APP_NAMESPACE                => realpath(APPPATH),
      		];

       

  • models/Hoksi/User.php
    • <?php
      namespace Models\Hoksi;
      
      class User extends \CodeIgniter\Model
      {
          protected $table = 'user';
          protected $allowedFields = ['name'];
          protected $useTimestamps = true;
          protected $useSoftDeletes = true;
      }

       

  • controllers/Home.php
    • <?php namespace App\Controllers;
      
      class Home extends \CodeIgniter\Controller
      {
         public function index()
         {
            $user = new \Models\Hoksi\User();
      
              $user->save(['name' => 'test']);
      
              d($user->findAll());
      
              $rows = $user->find(1);
      
              $user->update($rows['id'], ['name' => 'test_modify']);
      
      
              d($user->select('name')->findAll());
         }
         //--------------------------------------------------------------------
      }

       

 다음글 네이트 팀룸으로 메시지 전송 (10)
 이전글 Apache Memory Leak 대응방법 (3)

댓글

박쥐 / 2016/07/21 15:22:41 / 추천 0

잘보았습니다.

그런데 궁금한 것이 하나 있는데요, 

만약 user테이블과 blog 테이블 두개가 있다고 가정하고

user 테이블의 name이 홍길동인 사람의 blog row 데이터를 가져올려고 하면

보통 join을 하잖아요.

 

CI4에서는 model 방식에 따르려면

user 모델에서 name이 홍길동인 사람의 blog테이블과 대응되는 키를 가져오고

그 키로 blog 모델에서 일치하는 결과를 출력 시키면 될까요?

물론 방법이야 여러가지겠지만, CI4의 바뀐 방식을 따른다면....이게 일반적이라고 볼 수 있을까요?

kaido / 2016/07/21 16:59:05 / 추천 0

오토로드에서 네임스페이스를 추가해서 사용 하는 거군요 ㄱ-

아무리 찾아도 없길래..

 

어딘가에다 네임스페이스 넣어서 핸들링 시킬까? 고민고민 했는데 원래 그렇게 쓰는군요 ㄱ-

뭐랄까 CI 같지 않아 졌네요.

한대승(불의회상) / 2016/07/21 17:40:27 / 추천 0

@박쥐 CI4에 모델은 ORM 개념이 어느정도 들어간 것 같습니다.

아직 개발 버젼이라 어떻게 진행 될 지 모르겠네요.

간단한 샘플을 작성하는것을 목적으로 한거라 Join 부분은 좀 더 살펴 봐야 겠습니다.