Как получить следующий идентификатор автогенерируемого поля в laravel для конкретной таблицы?

Я ищу что-то вроде:

DB::table('users')->getNextGeneratedId();

не

$user->save($data)
$getNextGeneratedId = $user->id;

Кто-нибудь знает, что это нужно?

Ответы

Ответ 1

Эта работа для меня: (PHP: 7.0 - Laravel 5.5)

use DB;

$statement = DB::select("SHOW TABLE STATUS LIKE 'users'");
$nextId = $statement[0]->Auto_increment;

Ответ 2

Вам нужно выполнить запрос MySQL, чтобы получить автоматически сгенерированный идентификатор.

show table status like 'users'

В Laravel5 вы можете сделать следующее.

public function getNextUserID() 
{

 $statement = DB::select("show table status like 'users'");

 return response()->json(['user_id' => $statement[0]->Auto_increment]);
}

Ответ 3

Вы можете использовать этот метод совокупности и увеличить его:

$nextId = DB::table('users')->max('id') + 1;

Ответ 4

В Laravel5 вы можете сделать следующее.

$data = DB::select("SHOW TABLE STATUS LIKE 'users'");

$data = array_map(function ($value) {
    return (array)$value;
}, $data);

$userId = $data[0]['Auto_increment'];

Ответ 5

В MySQL вы можете получить автоматически сгенерированный идентификатор по этому запросу.

SELECT AUTO_INCREMENT
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = "databaseName"
AND TABLE_NAME = "tableName"

Ответ 6

Попробуй это:

$id = DB::table('INFORMATION_SCHEMA.TABLES')
    ->select('AUTO_INCREMENT as id')
    ->where('TABLE_SCHEMA','your database name')
    ->where('TABLE_NAME','your table')
    ->get();

Ответ 7

Для PostgreSQL:

<?php // 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;
    }
}

Модель:

<?php // User.php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    use GetNextSequenceValue;
}

Результат:

<?php // 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());
    }
}

Ответ 8

$next_user_id = User::max('id') + 1;

Ответ 9

Это фрагмент кода, который я использовал, ведьма будет отлично работать

Спасибо,

$id=DB::select("SHOW TABLE STATUS LIKE 'Your table name'");
$next_id=$id[0]->Auto_increment;
echo $next_id;