반대 문제는 this guy입니다. DBIC가 해당 상태 오브젝트가 작성 될 필요가 있는지 확인하기 위해 SELECT
를 수행하거나 가진 경우 일 것이다 배후관련 객체를 다시 패치하지 않고 행을 만드는 방법은 무엇입니까?
$rs->create({ foo => 'bar',
status => { label => 'Active' } });
:
나는 많은이 패턴을 사용하는 데 사용하는 응용 프로그램이 레이블 "활성"이 존재합니다. 그것이 존재한다면 ID는 내가 생성하는 객체의 FK 값으로 사용됩니다.
문제는 상태 테이블이 거의 변경되지 않으며 상태가 너무 많지 않으므로 99.99 %는 기본적으로 DB에 대한 쿼리 낭비입니다. ENUM을 대신 사용하려고 생각했지만 응용 프로그램의 초기 단계 였기 때문에 처음 몇 주 동안 몇 가지 새로운 상태가 나타날 수밖에 없었습니다. INSERT는 ***에서 ALTER TABLE status CHANGE label label ENUM(...)
보다 고통이 적습니다. 또한 테이블에 추가하면 UI에서 드롭 다운을 만들기 위해 가능한 값을 쉽게 나열 할 수 있습니다.
이제 우리는 THING
라벨을 가지고 ID를 반환하는 get_THING_id
함수를 가지고 있습니다. get_THING_id
기능 memoized이며 우리는이 작업을 수행 :
$rs->create({ foo => 'bar',
status_id => get_status_id('Active') });
그것은 매우 DBIC-y를 생각하지 않으며 그것은 사방에 사람들을 가져올 필요가 어색합니다.
글 머리 기호를 물고 단지 ENUM을 사용해야합니까? 사람들이 이런 종류의 작은 테이블을 어떻게합니까?
Result 객체를 첫 번째 코드 블록의 구문과 함께 'status'로 전달할 수 있습니까? – simbabque
@simbabque 필자는 하나도 갖고 있지 않기 때문에''Active "=> $ active_status'와 같은 맵을 유지하는 것을 의미 할 것입니다. 기본적으로 다시 memoization입니다. –