2008년 10월 7일 화요일

CakePHP 1.2 에서 generateList() 에러!

cakePHP를 사용하기 시작한지 얼마되지 않았지만 모델의 연관을 통한 강력한 기능은 아주 매력적이라는 생각을 하게 된다. 사실 MVC 패턴이라고 해서 생소한 환경으로 갈아탄것도 아직 적응이 다 되었다고 하기에는 조금 무리가 있다. 암튼 오늘은 cakePHP를 학습하면서 알게 된 간단한 팁을 올리도록 하겠다.

generateList()는 모델 사이의 연관이 정의되어 있는 경우(A라는 모델과 B라는 모델이 belongsTo 라는 연관으로 묶여 있는 상태에서) 외래키를 보고 대상이 되는 모델의 리스트를 뽑아와서 셀렉트 박스 형태로 뿌려 줄 때 유용합니다.(이런 조금 헷갈리네요.) 책을 새로 등록할때 책을 쓴 저자명을 등록하는데 저자명을 셀렉트 박스 형태로 뿌리고 싶은 경우입니다. 그런데 설명에 나와있는대로 하니까 에러가 나옵니다.

구글링해서 찾은 정보입니다. find('all') 보다 find('list') 형태로 받아와야 작동을 한다라고 되어 있는데요. /app/app_model.php 라는 파일을 만들고 아래 함수를 추가해 주면 됩니다.

<?php
class AppModel extends Model {
function getlist ($cond=null,$order=null,$limit=null,$key=null,$val=null) {
    return $this->find("list",array(
        'conditions' => $cond,
        'order' => $order,
        'limit' => $limit,
        'fields' => array(str_replace('{n}.','',$key), str_replace('{n}.','',$val))
    ));
}
}
?>

이제 generateList() 대신 getlist() 라고 사용하시면 됩니다. 이때 코딩 형식은

getlist(null, null, null, '{n}.ModelName.key', '{n}.ModelName.value');

위와 같이 해주시면 됩니다. 1.2메뉴얼에 설명이 되어 있군요....^^

2 개의 댓글:

  1. 혹시 회사에서 cakePHP를 쓰시는건가요??



    저도 지난주에 find("list"...)를 알게 되어서 즐겁게 쓰고 있는데...



    방갑네요 :)

    답글삭제
  2. @innis - 2008/10/07 18:39
    아.. 저도 본격적으로 사용하기 시작한지는 얼마 되지 않습니다. 반갑습니다...^^

    답글삭제