2010-04-27 2 views
0

저는 현재 고객을 위해 견적 작성에 사용되는 CakePHP에 응용 프로그램을 작성하고 있습니다. 따라서 견적은 모델입니다. 다른 모델에서 사용할 수있는 "속성"과 같은 별도의 모델/테이블을 갖고 싶습니다.CakePHP에서 새 레코드를 추가 할 때 "등록 정보"모델을 업데이트하십시오.

사용자가 "견적 추가"작업을 수행 할 때마다 기본적으로 "nextQuoteNumber"또는 그 라인을 따라 속성을 가져 와서 새로운 견적이 자동으로 해당 속성 인 저장되었습니다. 그래서 인용구의 ID에 자동 증가를 사용하는 것이 적절하다고 생각하지 않습니다. 또한 "견적 번호"는 행의 ID와 다를 수 있습니다.

나는 이것이 할만 큼 간단하다는 것을 알고 있지만, 나는 그것을하는 "적절한"CakePHP 방법을 찾으려하고있다! 나는 속성 모델 내에서 메소드를 가져야한다고 생각하고 있는데, 반환 할 값을 가져올 "getProperty ($ property_name)"라고 말하면서 또한 값을 증가시킨다. 그러나 가장 좋은 방법은 무엇인지 모르겠다. 또는 Quotes 컨트롤러에서이 메소드를 호출하는 방법이다.

어떻게해야합니까? 미리 감사드립니다!

답변

1

더 구체적인 'Property'보다는 'Sequence'에 대한 모델을 만들면서 조금 더 구체적인 작업을 수행하게되었습니다. 시퀀스에는 ID, 이름, 값의 세 가지 필드가 있습니다. 현재 1001부터 시작하는 따옴표의 순서가 필요하기 때문에 한 행 ('Quote', 1001)이 있습니다. 모델 파일 sequence.php에서

는 다음과 같습니다 :

class Sequence extends AppModel { 
var $name = 'Sequence'; 

function getNext($sequenceName) { 
    // Make this a transaction, so two concurrent requests can't get the same value. 
    $this->begin(); 
    // Find the sequence for the given object, let's say 'Quote' 
    $row = $this->find('first', array(
     'conditions' => array('Sequence.name' => $sequenceName), 
     'fields' => array('id', 'value'), 
    )); 
    // Save the original value (before incrementing) so we can return it. 
    $value = $row['Sequence']['value']; 
    // Update the value in the database. 
    $row['Sequence']['value'] = $value + 1; 
    $this->save($row); 
    // Commit the changes to the database, ending the lock. 
    $this->commit(); 
    return $value; 
} 

webbiedave가 지적했듯이,) (원 자성이 필요하거나 두 사용자가/따옴표 따라서 시작, 같은 일련 번호를 얻을 수있는 가능성이 있습니다 및 commit() 호출. 내가 원하는대로

$this->loadModel('Sequence'); 
$quoteNumber = $this->Sequence->getNext('Quote'); 

그런 다음 나는 $ quoteNumber를 사용할 수 있습니다

그런 다음 내 quotes_controller에, 나는() 액션을 추가로 다음과 같은 추가했다.

희망이 있으면 누군가에게 도움이되며 더 나은 방법이 있다면 기부 해주세요. 감사!

0

어떤 방식 으로든 잠금을 사용하지 않으면 초기 접근 방식으로 중복 된 견적 번호가 생성됩니다.

사용자가 "견적 추가"페이지로 이동하면 따옴표 표에 새 행을 만들고 ID를 가져 와서 페이지에 던집니다. 사용자가 견적을 제출하면 새 정보로 행을 업데이트하십시오.

검색어에서 빈 따옴표를 필터링하는 것은 쉬운 일이 아닙니다.

+0

"견적 추가"페이지를 방문 할 때마다 속성이 업데이트되므로 중복되는 번호는 문제가 아니어야합니다. 앨리스가 방문하여 번호 1001을 얻은 다음 앨리스가 저장하기 전에 Bob이 방문하면 1002 Alice의 페이지 방문으로 인해 재산이 증가했을 것입니다. 사용자가 저장 또는 "취소"를 클릭하지 않고 페이지를 떠날 경우 초기에 행 삽입을하지 않을 것입니다. –

+0

다음과 같이 더합니다. Bob이 number를 묻습니다. 데이터베이스가 Bob에 대해 1001을 검색하면 Alice가 number를 요청합니다. 데이터베이스는 1001을 검색하여 Alice에게줍니다. Bob은 증분 한 다음 번호를 저장합니다. 그럼 앨리스는 않습니다. 둘 다 같은 견적 번호를 가지고 있습니다. – webbiedave