Нумерация документов на PHP - PullRequest
0 голосов
/ 20 октября 2019

PHP, Laravel 6.0: я не могу написать работающую статическую функцию или переменную для нумерации моих документов с приращением. Каждый раз, когда я создаю документ, он должен устанавливать его номер (Документ № 1, № 2, № 3 ... и т. Д.)

Я проверял и пробовал подобные вопросы в StackOverflow, но они не работали.

У меня есть класс Observer, который должен обрабатывать событие «создания» и использовать эту функцию для установки нового номера. Вот мои попытки:

class DocumentObserver
{
    /**
     * Found this one on StackOverflow but it didn't work
     */
    public function currentNum()
    {
        static $num = 6;
        $num++;
        return $num;
    }

    /**
     * Tried to use a property but it didn't work as well
     */
    public static $currentNumber = 0;

    /**
     * Set number to the document
     */
    public function setNumber(Document $document)
    {
        //set format of document number (XX00000001)
        $document->number = "IQR" . sprintf('%06d', self::currentNum());
    }

    /**
     * Handle the rent "creating" event.
     *
     * @param  \App\Models\Document $document
     * @return void
     */
    public function creating(Document $document)
    {
        $this->setNumber($document);
    }
  }

Я был бы рад, если бы вы помогли мне решить эту проблему. Любые дополнительные советы в этом случае будут очень полезны, так как я новичок в PHP и Laravel.

1 Ответ

0 голосов
/ 20 октября 2019

"Два запроса означают два выполнения сценария и два отдельных пространства памяти. В конце первого запроса первый сценарий заканчивается, и все изменения, сделанные в памяти, забываются. Второй сценарий начинается с нуля,со всеми переменными, имеющими значение по умолчанию. "от StackOverflow.

Спасибо, Джето и Элиасу Соарешу за объяснения.

Вот мое решение до сих пор:

public function setNumber(Document $document)
  {
    //Get the highest "id" in the table + 1
    $max_id= Document::max('id') + 1;

    //set format of document number (XX00000001)
    $document->number = 'SQ' . sprintf('%07d', $max_id);
  }
...