Я закончил тем, что сделал что-то более конкретное, создав модель для «Последовательности», а не для более общего «Свойства». Последовательность имеет три поля: идентификатор, имя, значение. Поскольку в настоящее время мне нужна последовательность для кавычек, начинающаяся с 1001, есть одна строка (1, '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, атомарность требуется или возможно, чтобы два пользователя / цитаты могли получить одинаковый порядковый номер, следовательно, вызовы begin () и commit ()
Затем в свой quotes_controller я добавил следующее в действии add ():
$this->loadModel('Sequence');
$quoteNumber = $this->Sequence->getNext('Quote');
Тогда я могу использовать $ quoteNumber по своему желанию.
Надеюсь, это кому-нибудь поможет, и, пожалуйста, помогите, если есть лучший способ сделать это. Спасибо!