CI 묻고 답하기

제목 CI4 DB 연결 및 model 질문
카테고리 CI 4 관련
글쓴이 에로글애머 작성시각 2023/11/15 19:52:43
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 543   RSS

CI 를 오랫만에 다시 접하고 CI4 를 composer 를 이용하여 설치하였습니다. 

단순 텍스트를 찍는 컨트롤러는 정상 동작하고 있습니다. 

 

DB 관련 설정을 하고 모델을 만들어서 실행을 시켰는데 

Call to undefined method CodeIgniter\Database\MySQLi\Connection::select() 에러를 만나고 어찌할 바를 모르겠습니다. 

에러를 내는 라인의 코드는 모델 쪽의 $this->db->select('ct_id'); 입니다.

DB 연결이 제대로 되지 않아 생긴 문제라고 생각하는데, 확인을 어떻게 해야 하는 지 예제는 있는 지

제가 무지한 탓에 해결을 못하고 있네요. 

죄송하지만 답변을 부탁드립니다.

 

.env 에 DB 관련 설정은 다음과 같습니다.  ( 로컬에서 RDS 는 workbench 로 정상접속 가능합니다. ) 

---------------------------------- .env ----------------------------------------

database.default.hostname = RDS 엔드포인트

database.default.database = 디비명

database.default.username = 계정

database.default.password = 비번

database.default.DBDriver = MySQLi

database.default.DBPrefix =

database.default.port = 3306

----------------------------------------------------------------------------------

 

컨트롤러는 다음과 같습니다.

---------------------------------- CartRyu Controller ----------------------------------------

class CartRyu extends BaseController {   

    public function initController(

        RequestInterface $request,

        ResponseInterface $response,

        LoggerInterface $logger

    ) {

        parent::initController($request, $response, $logger);

    }

    public function getData() {

        // 모델 로드 

        $cartRyuModel = new CartRyu_model();

        $cData = $cartRyuModel->getCartRyu();

        echo json_encode( $cData );

    }

}

-----------------------------------------------------------------------------------------

 

모델은 다음과 같습니다. 

---------------------------------- CartRyu Controller ----------------------------------------

class CartRyu_model extends Model

{

    protected $table = 'cart_ryu'; // 테이블 명

    public function __construct()

    {

        parent::__construct();

        $db = \Config\Database::connect('default');

    }

    public function getCartRyu() {

        $this->db->select('ct_id');

        $this->db->where('ct_id <', 1000);

        $this->db->order_by('ct_id desc');

        $qry = $this->db->get($this->table);

        $result = $qry->result_array();

        return $result;

    }

}

------------------------------------------------------------------------------------------

 

 다음글 php 레거시 -> ci 전환 질문 (1)
 이전글 intl 관련 질문입니다 (1)

댓글

변종원(웅파) / 2023/11/15 21:01:17 / 추천 0
생성자에 $db -> $this->db
못찾아서 생기는 에러입니다
kaido / 2023/11/17 13:19:46 / 추천 0

개인적으로 헷깔려서 첨언 합니다.

public function getCartRyu() {
        $qry = $this->db->table($this->table)
            ->select('ct_id')
            ->where('ct_id <', 1000)
            ->orderBy('ct_id', 'desc')
            ->get();
        $result = $qry->getResultArray();
        return $result;
    }

 

 

2번은 빌더 방식

public function getCartRyu() {
        $db = db_connect(); 
        // OR
        $db = db_connect('default'); 
        
        $builder = $db->table($this->table);
        $builder->select('ct_id');
        $builder->where('ct_id <', 1000);
        $builder->orderBy('ct_id', 'desc');
        $result = $builder->get()->getResultArray();
        return $result;
    }

 

$this->db 하실때는 한번에 체인닝 해서 써주셔야 합니다.

나눠서 조건문을 넣어야 한다면 빌더로 받아와서 조건을 거는 방식을 추천드립니다.