序文: Zend Framework 1.12 と RedBean PHP を使用しています。
以下の関数は、テーブルにクエリを実行して、エントリが存在するかどうかを確認します。true の場合、ファイル名から数値を取り除き、インクリメントしてから返します。ものすごく単純。エントリが存在しない場合は、1 から開始します。これも基本です。これは、2 つの予測可能なランダムな瞬間を除いて、すべて意図したとおりに機能します。私は問題を数回正常に再現し、毎回結果は似ていますが異なるため、予想通りランダムと言います。
予測可能な部分は、カウンターが 10 未満の場合に数値が 2 回重複しているように見えることです (10 回のレプリケーションのうち 1 回を除く)。カウンターが 60 に達するまで、さらに重複することなく関数をインクリメントし続けることができます。番号が重複するパターンもありません。
以下は、ZF と RedBean を使用した関数であり、それに続くのが出力です。
public function getNextOrderFormNumber() {
$orderFormNumber = R::getCell( 'select orderFormFilename from orders_manufOrderForms order by dateCreated desc limit 1' );
// if an entry exits
// the result will be like 'mmOrderForm-1.pdf'
if($orderFormNumber){
$num = explode('.', substr($orderFormNumber, 12));
$this->orderFormNumber = $num[0];
}
Zend_Debug::dump($orderFormNumber, 'DB');
Zend_Debug::dump($this->orderFormNumber, 'Current Number');
Zend_Debug::dump( date('i:s') );
// start at 1 for first order, else increment the value
if(!$this->orderFormNumber) {
$this->orderFormNumber = 1;
} else {
$this->orderFormNumber++;
}
Zend_Debug::dump($this->orderFormNumber, 'newOrderNumber');
return $this->orderFormNumber;
}
まだフォローしている場合は、出力を再確認して実際に何が起こっているかを確認するために、いくつかの ZF ダンプがあります。何らかの理由でスクリプトが遅れているなどのタイミングの問題だと思ったので、タイムスタンプも追加しましたが、そうではないようです。また、何かが詰まっているようなランダムな複製ではなく、実際に呼び出しを実行しているだけでなく、以前の値を上書きしていることも付け加えておく必要があります。
DB array(0) {
}
Current Number NULL
string(5) "26:29"
newOrderNumber int(1)
filename to save as string(17) "mmOrderForm-1.pdf"
--
DB string(17) "mmOrderForm-1.pdf"
Current Number string(1) "1"
string(5) "26:30"
newOrderNumber int(2)
filename to save as string(17) "mmOrderForm-2.pdf"
--
DB string(17) "mmOrderForm-2.pdf"
Current Number string(1) "2"
string(5) "26:31"
newOrderNumber int(3)
filename to save as string(17) "mmOrderForm-3.pdf"
--
DB string(17) "mmOrderForm-2.pdf"
Current Number string(1) "2"
string(5) "26:31"
newOrderNumber int(3)
filename to save as string(17) "mmOrderForm-3.pdf" <-- first occurrence
--
DB string(17) "mmOrderForm-3.pdf"
Current Number string(1) "3"
string(5) "26:32"
newOrderNumber int(4)
filename to save as string(17) "mmOrderForm-4.pdf"
--
DB string(17) "mmOrderForm-4.pdf"
Current Number string(1) "4"
string(5) "27:36"
newOrderNumber int(5)
filename to save as string(17) "mmOrderForm-5.pdf"
--
DB string(17) "mmOrderForm-5.pdf"
Current Number string(1) "5"
string(5) "27:37"
newOrderNumber int(6)
filename to save as string(17) "mmOrderForm-6.pdf"
--
DB string(17) "mmOrderForm-6.pdf"
Current Number string(1) "6"
string(5) "27:38"
newOrderNumber int(7)
filename to save as string(17) "mmOrderForm-7.pdf"
--
DB string(17) "mmOrderForm-7.pdf"
Current Number string(1) "7"
string(5) "27:39"
newOrderNumber int(8)
filename to save as string(17) "mmOrderForm-8.pdf"
--
DB string(17) "mmOrderForm-7.pdf"
Current Number string(1) "7"
string(5) "27:39"
newOrderNumber int(8)
filename to save as string(17) "mmOrderForm-8.pdf" <-- second occurrence
TL;DR: これは、ここでの他の質問に当てはまらないようです。本当にランダムなものか、信じられないほど明白で、私には見えないもののように感じます. (おそらく最悪の tr;dr です、申し訳ありません)
心から…困っています。