CI 묻고 답하기

제목 DB데이터 가공해서 list 배열에 추가해서 foreach 를 쉽게 하고 싶어요.
글쓴이 수석코치 작성시각 2016/04/14 13:53:43
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 20665   RSS

만들면서배우는 CI 책에서 나와있는 lists 관련 부분을 딱 뺀 부분입니다. 제가 하고 싶은것이 있어서,,, 질문을 드려봅니다.

단순히, 컨트롤러에서 모델로 보내서 1개의  Row에 담아서 다시 컨트롤러로 보냈습니다.

근데 저는,  DB를 구성했을 때, 미래의 수정사항을 손 쉽게 바꾸고자 해서, 중요 키워드 단어들은 모두 별도의 코드 테이블에서

관리하기 위해서 빼두고, 순수 게시판 Table에 정보들은 모두 0, 1, 2, 1234, 뭐 이런식의 코드 데이터들로 입력을 해놨습니다.

 

아래 소스가 해당 부분입니다.

 

/* xxx.php Controller */
$data[lists] = $this->xxx_m->lists();
$this->load->view('list_v', $data);	// 뷰-리스트-출력

/* xxx_m.php  Model */
function lists(){
	$query = "select * from a";
	$result = $query ->row();
	return $result
}

/* xxx_v.php  View */
<?php	foreach($lists as $lt){ ?>
<tr>
	<td><input type="checkbox" name="chk_all" id="chk_all" class="checkbox"></td>
	<td><?= $lt->idx ?></td> <!-- 순수 DB Row Data -->
	<td><?= $lt->name ?></td> <!-- 순수 DB Row Data -->
	<td><?= $lt->login ?></td> <!-- 순수 DB Row Data -->
	<td><?= $lt->nickname ?></td> <!-- 순수 DB Row Data -->
	<td><?= $lt->status ?></td> <!-- Row Data -> Text로 교정된 데이터  -->
	<td><?= $lt->writer ?></td> <!-- Row Data -> Text로 교정된 데이터  -->
</tr>

<? } ?>

 

이렇게 되어 있을 때... 

모델에서 db를 건드릴때 코드 테이블과 데이터 테이블을 일일이 조인해서 하는 방법 외에,

컨트롤러에서 임의의 함수를 통해서 변경해서 다시 $data[lists] 배열 안에 넣어서 view.php 페이지에서

$lt->status 하면 상태값 0,1,2, 대신에 "살았다" , "죽었다", "죽깆ㄱ전" 뭐 이런식으로 표시하게 하고 싶은거거든요.. 

$data[status] = "살았다" 이렇게 하면 view 에서 <?= status ?> 로 쓸수는 있는데 다중 행의 반복문에서는 적절치 못한 것 같아서요.

그래서 제 생각대로 $data[lists][status]  = "살았다" 이렇게 해보니 에러 나서요...

방법이 있으면 가르침 부탁 드립니다.

 

lists.php 페이지는 다중의 row 행인데... db 테이블 조인이 가장 속 편할까요...? 아니면... 함수 통해서 다녀와서 다시 넣는게 편할런지..

어떤게 정답인지는 저도 여태까지 매번 하면서 고민이었긴 한데, ㅊ코드이그나이터를 접하고 나서는 기존에 해왔던 방법이랑은 조금 틀려서요~

 

이전에는.. 그냥 view 페이지에다가 함수 하나 만들어놓고, 계속 호출하면서 바꿔주는 방식을 취했기는 했습니다만... 흠냐 -_-;

 

고수님들의 많은 가르침 부탁 드립니다. 

 다음글 Codeigniter가 지원하는 Database들은 전... (2)
 이전글 두가지 궁금점이 있습니다. (4)

댓글

kaido / 2016/04/14 15:44:22 / 추천 0

조인식이 아니면 해당 값을 바꾸는 방법은 if 문 말고는 없습니다.

방식의 차이인데, 사실 뷰에서 if 문으로 넣는게 논리적으로는 맞습니다만

일부러 컨트롤러에서 if문으로 배열값을 전부 교체해놓고 view에서는 출력만 합니다.

MVC 규칙을 지키기 위해서 말이죠.

요약하면

 $this->xxx_m->lists();

이 값을 기준으로 foreach 한번 돌려서 if 문으로 원하는 값을 바꾸고 view 에서는 출력만 합니다.

 

수석코치 / 2016/04/14 16:35:04 / 추천 0

kaido 님 의견 감사합니다. 

그럼 하나만 다시 질문드리면,, $data[lists] = xxxx_m 에서 result로 리턴 받는 값들의 배열인데요...

 

구성도는 

Array
(
    [0] => stdClass Object
        (
            [seq] => 1
            [cu_idx] => 1
            [cu_name] => asdf
            [cu_sex] => male
            [cu_tel1] => 1234
            [cu_etc_hospital] => 
            [cu_complain] => 1
            [cu_customer_job] => 1
            [cu_customer_addr] => 1
            [cu_customer_tendencies] => 1
        )

)

이렇게 되었을 때...

커트롤러에서 열심히 if로 저 위의 숫자 1의 값 들을 text치환 했을 때,

다시 [cu_xxx_xxx] => aaaaaaaa 로 넣는 방법 좀 알려주실 수 있나요?

질문 글에도 포함되어 있는 사항이긴한데요.. 흠냐;; 

아니면 그냥 애초부터 조인식으로 해서 원하는 것만 셀렉트 해서 가져와서 mvc 지켜가야 하는지.. 디비에 부담은 안갈련지 하느 뭐 그런거죠... ㅎㅎ;;

 

 

 

 

 

 

kaido / 2016/04/14 17:14:36 / 추천 1

사실 조인식이 오히려 더 낭비 없는 방법입니다.  테이블 조인 1개 정도는 부담이 거의 없습니다.

//list 출력 기본 식입니다. -- 저는 이렇게 씁니다.

//model
function lists(){
$this->from('tb_name');
return $this->get()->result_array();
}


//controller
$db_data = $this->model->lists();

//변환이 필요하면
foreach($db_data as $key=> $val){
if($val['cu_customer_job'] == 1) $db_data[$key]['cu_customer_job'] = "꽃거지";
}
$data['lists'] = $db_data;

//view -- ci 에서 제공하는 숏코드 사용
<?php foreach($lists as $key => $val): ?>
<?=$val['idx']?>
<?=$val['cu_customer_job']?>
<?endforeach; ?>

 

view 숏코드 [대체문법] 에 대해서 더 자세한 사항은 메뉴얼 참고

http://www.ciboard.co.kr/user_guide/kr/general/alternative_php.html

[의외로 유용합니다 ㅎㅎ]

변종원(웅파) / 2016/04/14 20:26:28 / 추천 0
단순히 살았다 죽었다를 표현하기 위한 것이라면 sql문에 if문으로 처리하면 됩니다. mysql if로 검색해보세요