더 구체적인 '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에, 나는() 액션을 추가로 다음과 같은 추가했다.
희망이 있으면 누군가에게 도움이되며 더 나은 방법이 있다면 기부 해주세요. 감사!
"견적 추가"페이지를 방문 할 때마다 속성이 업데이트되므로 중복되는 번호는 문제가 아니어야합니다. 앨리스가 방문하여 번호 1001을 얻은 다음 앨리스가 저장하기 전에 Bob이 방문하면 1002 Alice의 페이지 방문으로 인해 재산이 증가했을 것입니다. 사용자가 저장 또는 "취소"를 클릭하지 않고 페이지를 떠날 경우 초기에 행 삽입을하지 않을 것입니다. –
다음과 같이 더합니다. Bob이 number를 묻습니다. 데이터베이스가 Bob에 대해 1001을 검색하면 Alice가 number를 요청합니다. 데이터베이스는 1001을 검색하여 Alice에게줍니다. Bob은 증분 한 다음 번호를 저장합니다. 그럼 앨리스는 않습니다. 둘 다 같은 견적 번호를 가지고 있습니다. – webbiedave