[ CodeIgniter 4 ] model을 이용해서 DB에 있는 Data가져오기
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문을 사용해서 하나하나 끄내고, "->"를 이용해서 속성 값에 접근할 수 있습니다.