제목 | DB데이터 가공해서 list 배열에 추가해서 foreach 를 쉽게 하고 싶어요. | ||
---|---|---|---|
글쓴이 | 수석코치 | 작성시각 | 2016/04/14 13:53:43 |
|
|||
만들면서배우는 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
|
수석코치
/
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로 검색해보세요
|
조인식이 아니면 해당 값을 바꾸는 방법은 if 문 말고는 없습니다.
방식의 차이인데, 사실 뷰에서 if 문으로 넣는게 논리적으로는 맞습니다만
일부러 컨트롤러에서 if문으로 배열값을 전부 교체해놓고 view에서는 출력만 합니다.
MVC 규칙을 지키기 위해서 말이죠.