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문을 사용해서 하나하나 끄내고, "->"를 이용해서 속성 값에 접근할 수 있습니다.
'IT 공부 > CodeIgniter' 카테고리의 다른 글
[ Codeigniter ] Codeigniter 4 프로젝트 virtualhost 서버 설정 (0) | 2022.02.28 |
---|---|
[ Codeigniter 4 ] GoogleのKeyword広告クローラー (0) | 2022.01.21 |
[ codeigniter 4 ] 더보기를 클릭하면, ajax를 통해서 목록 불러오기 (0) | 2022.01.05 |
[ CodeIgniter 4 ] Controller로 유저의 요청 처리하기 (0) | 2021.12.07 |
[ CodeIgniter 4 ] 설치, 환경설정 (0) | 2021.12.07 |