использовать автоинкрементный идентификатор с jenssegers mongodb laravel - PullRequest
1 голос
/ 29 апреля 2019

Мне нужно автоматически сгенерировать последовательность идентификаторов.

Я использую jenssegers.

У меня есть UseAutoIncrementID trait из здесь .

И используя его как:

use App\Traits\UseAutoIncrementID;
....
....
$data['_id'] = $this->getID('request_feeds'); // request_feeds is collection name.

Я получаю эту ошибку:

(1/1) FatalThrowableError
Call to undefined method Illuminate\Database\MySqlConnection::getCollection()

Как получить автоматически сгенерированную последовательность идентификаторов с помощью jenssegers?

1 Ответ

0 голосов
/ 28 мая 2019
  1. В вашей модели добавьте эти методы:
    public function nextid()
    {
        // ref is the counter - change it to whatever you want to increment
        $this->ref = self::getID();
    }

    public static function bootUseAutoIncrementID()
    {
        static::creating(function ($model) {
            $model->sequencial_id = self::getID($model->getTable());
        });
    }
    public function getCasts()
    {
        return $this->casts;
    }

    private static function getID()
    {
        $seq = DB::connection('mongodb')->getCollection('counters')->findOneAndUpdate(
            ['ref' => 'ref'],
            ['$inc' => ['seq' => 1]],
            ['new' => true, 'upsert' => true, 'returnDocument' => FindOneAndUpdate::RETURN_DOCUMENT_AFTER]
        );
        return $seq->seq;
    }

  1. В вашем контроллере создайте новую коллекцию и используйте метод nextid () - Пример:
$car = new Car();
$car->nextid(); // auto-increment
$car->name = "Ferrari",
$car->save();
...