내가 한 노력들

[ CodeIgniter 4 ] model을 이용해서 DB에 있는 Data가져오기 본문

IT 공부/CodeIgniter

[ CodeIgniter 4 ] model을 이용해서 DB에 있는 Data가져오기

JONGI-N CHOI 2021. 12. 8. 12:00

Model

model에서는 DB에서 data에 접근하고 수정 및 추가등의 작업을 수행합니다. 

 

위치

App\Models의 경로에 위치합니다. 

 

 

Model 생성

Models\Topic.php

<?php
namespace App\Models;

use CodeIgniter\Model;

    class Topic extends Model {
        protected $db;

        function __construct() {
            parent::__construct();
            $this->db = db_connect();
        }

        public function gets() {
            return $this->db->query("SELECT * FROM topic")->getResult();
        }

        public function get($id) {            
            return $this->db->table('topic')->where('id', $id)->get()->getRow();
        }
    }
?>

위의 코드에서 gets()메소드는 topic 테이블에 있는 모든 데이터를 가져오는 메소드

 

get()는 특정 id값의 topic 데이터만 가져오는 메소드 

 

위의 만들어둔 코드를 Controller에서 접근할 수 있습니다. 

 

Controllers\Topic.php

<?php
namespace App\Controllers;

class Topic extends BaseController
{
    protected $db;
    protected $topicModel;
    
    public function __construct()
    {
        $this->db = db_connect();
        $this->topicModel = model('App\Models\Topic');
    }

    public function index()
    {
        $topics = $this->topicModel->gets();
        echo view('topic_list', [
            'topics' => $topics
        ]);
    }
}

우선 Db를 사용하기 위해서는 모든 곳에서 db를 초기화 및 로드를 해줘야하는데, $this->db = db_connect();가 그 역할을 수행합니다. 

그리고, model에 접근하기 위해서는 model()함수를 사용해야합니다. $this->topicModel = model('App\Models\Topic');가 Topic 모델에 접근하여 인스턴스를 생성합니다. 

 

위의 과정은 다른 함수에서도 사용하는 공통적인 부분이기 때문에 생성자에다가 선언을 해준 겁니다. 

 

 

그럼 이젠 index()메소드에서는 Topic의 인스턴스인 topicModel을 통해서 gets()메소드를 사용합니다. 

public function gets() {
	return $this->db->query("SELECT * FROM topic")->getResult();
}

gets()메소드는  "SELECT * FROM topic" 쿼리를 실행해서 모든 결과를 객체형태로 받아옵니다. (getResult());

 

 

$topics = $this->topicModel->gets();

echo view('topic_list', [
            'topics' => $topics
        ]);

결과를 $topics 변수에 담아서, view함수를 통해서 views\topic_list.php에 $topics를 함께 전달하는 것을 볼 수 있습니다.

 

 

views\topic_list.php

<div class="col-2">
    <ul class="list-group">
        <?php 
        foreach ($topics as $topic) { ?>
        <li class="list-group-item">
            <a href="/tutorial/public/topic/get/<?=$topic->id?>">
                <?=$topic->title?>
            </a>
        </li>
        <?php } ?>
    </ul>
</div>

$topics는 객체형태로 값을 가지고 있기 때문에, foreach문을 사용해서 하나하나 끄내고, "->"를 이용해서 속성 값에 접근할 수 있습니다.