CI 묻고 답하기

제목 쿼리를 반복해서 날리고 싶은데 그 방법을 도저히 모르겠습니다.
카테고리 CI 2, 3
글쓴이 불꽃노 작성시각 2019/04/25 20:21:58
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 13192   RSS

안녕하세요.

CI로 개발을 진행한지 4개월이 되어가는 초보개발자입니다.

현재 CI 3.0과 Mysql을 사용해서 개발 중입니다.

개발에 개자도 잘 모르다보니, 최대한 커뮤니티나 구글을 통해서 궁금증을 해결하곤 했습니다.

하지만 이 부분에 대해서는 도저히 방법이 감조차 오지 않아서 몇가지 질문을 여쭙고자 합니다.

 

현재 View에서 체크박스를 선택한 값을 AJAX를 통해 배열에 담아 Controller로 보냅니다.

컨트롤러에서 받은 배열을 foreach문을 돌면서 쿼리를 입력하고 있는데요.

$selChkList라는 배열에 하나의 값만 들어갔을 땐 정상적으로 쿼리가 날아가서 $value라는 문자열이 포함되어 있는 값을 반환하는데, 배열에 2개 이상의 value가 있으면 마지막 value의 쿼리만 날아갑니다.

 

 

 


Model/Common_m.php

class Common_m extends CI_Model {

function select($table, $query = array(), $limit = null, $offset = null) {

foreach ($query as $key => $value) {

if ($key == 'like') {

foreach ($value as $a => $b) {

$this->db->like(array($a => $b));

}

} else if ($key == 'or_like') {

$this->db->group_start();

foreach ($value as $a => $b) {

$this->db->or_like(array($a => $b));

}

$this->db->group_end();

} else if ($key == 'not') {

foreach ($value as $a => $b) {

$this->db->where_not_in($a, $b);

}

} else if ($key == 'in') {

foreach ($value as $a => $b) {

$this->db->where_in($a, $b);

}

} else if ($key == 'join') {

foreach ($value as $a => $b) {

$this->db->join($a, $b);

}

} else if ($key == 'join_left') {

foreach ($value as $a => $b) {

$this->db->join($a, $b, 'left');

}

} else if ($key == 'group_by') {

foreach ($value as $a => $b) {

$this->db->group_by($b);

}

} else if ($key == 'or') {

$this->db->or_group_start();

foreach ($value as $a => $b) {

$this->db->or_where($a, $b);

}

$this->db->group_end();

} else if ($key == 'sort') {

foreach ($value as $a => $b) {

$this->db->order_by($a, $b, false);

}

} else if ($key == 'select') {

foreach ($value as $a => $b) {

$this->db->select($b);

}

} else {

if(isset($key) && isset($value)) {

$this->db->where(array($key => $value));

}

}

}

$result = $this->db->get($table, $limit, $offset);

return $result->result();

}

 

 




Controller/Search.php
if (isset($selChkList) == true) {
	foreach ($selChkList as $key => $value) {
		$query['or_like']['use_type'] = $value;
	}
}

 

 

결과적으로 mysql에서 날리는 이 쿼리를 CI로 옮겨오고 싶습니다.

SELECT mul_basic.mul_use_type, mul_basic.case_num FROM aboutb_30_test1.mul_basic WHERE (mul_basic.mul_use_type LIKE "%value[0]%" OR mul_basic.mul_use_type LIKE "%value[1]%" . . . .) AND mul_basic.case_num != 'NULL';

 

선배님들의 조언과 피드백을 얻고 싶습니다.

 다음글 Update에 대한 $this->db->af... (2)
 이전글 코드이그나이터 초보입니다. 데이터베이스 관련 설정에서 ... (3)

댓글

가리비 / 2019/04/25 22:42:23 / 추천 0

일단 Controller/Search.php 부분은

if (isset($selChkList) == true) {
    foreach ($selChkList as $key => $value) {
        $query['or_like']['use_type'][] = $value;
    }
}

이런식으로 $query['or_like']['use_type'] 에 여러개의 값이 들어갈 수 있게 처리를 해야될것 같고요

Common_m.php 부분에서도 or_like 부분이 수정되어야할 것 같습니다..

foreach ($value as $a => $b) {
  foreach($b as $c) {
      $this->db->or_like(array($a => $c));
    }
}

... 근데 구조는 조금 고민을 더 해보셔야하지 않나 싶습니다. 직관적이지 않은것 같아서요

불꽃노 / 2019/04/30 23:05:08 / 추천 0

@가리비

감사합니다 가리비님!

도움 주신 내용 반영해서 문제 해결해보도록 하겠습니다!^^