web-dev-qa-db-fra.com

Comment obtenir le prochain identifiant du champ autogénéré dans laravel pour une table spécifique?

Je cherche quelque chose comme:

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

ne pas

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

Est-ce que quelqu'un sait chaud pour y parvenir?

11
fico7489

Vous pouvez utiliser cette méthode d'agrégation et l'incrémenter:

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

Vous devez exécuter une requête MySQL pour obtenir un identifiant généré automatiquement.

show table status like 'users'

Dans Laravel 5, vous pouvez faire comme suit.

public function getNextUserID() 
{

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

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

Ce travail pour moi: (PHP: 7.0 - Laravel 5.5)

use DB;

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

Dans Laravel5, vous pouvez faire comme suit.

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

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

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

Pour 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;
    }
}

Le modèle:

<?php // User.php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    use GetNextSequenceValue;
}

Le résultat:

<?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());
    }
}
0
MingalevME

Essaye ça:

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

Dans MySQL, vous pouvez obtenir un identifiant généré automatiquement par cette requête.

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

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

0
Kevin Dion