Как получить следующее значение последовательности в Postgresql (sequence) Laravel ?
Postgres:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// GetNextSequenceValue.php namespace App\Models; use Illuminate\Support\Facades\DB; trait GetNextSequenceValue { public static function getNextSequenceValue() { $self = new static(); if (!$self->getIncrementing()) { throw new \Exception(sprintf('Model (%s) is not auto-incremented', static::class)); } $sequenceName = "{$self->getTable()}_id_seq"; return DB::selectOne("SELECT nextval('{$sequenceName}') AS val")->val; } } |
Модель:
1 2 3 4 5 6 7 8 9 10 |
// User.php namespace App\Models; use Illuminate\Database\Eloquent\Model; class User extends Model { use GetNextSequenceValue; } |
Тест результата:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// tests/Unit/Models/UserTest.php namespace Tests\Unit\Models; use App\Models\User; use Tests\TestCase; class UserTest extends TestCase { public function test() { $this->assertSame(1, User::getNextSequenceValue()); $this->assertSame(2, User::getNextSequenceValue()); } } |
Recommended Posts
Пояснение конфига для Pgbouncer
12.02.2024
Конфигурационный шаблон jinja2 для Patroni
11.02.2024