Wie bekomme ich die nächste ID des automatisch generierten Felds in Laravel für eine bestimmte Tabelle?

Lesezeit: 3 Minuten

Benutzeravatar von fico7489
fico7489

Ich suche sowas wie:

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

nicht

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

Weiß jemand, wie man das erreicht?

  • Welches Laravel verwendest du? Warum haben Sie alle verfügbaren Versionen markiert?

    – Ivanka Todorova

    13. Mai 2016 um 13:05 Uhr


  • Ich verwende Laravel 5.2. Ich habe alle Laravels markiert, weil es keine spezifische Frage für die Laravel-Version ist.

    – fico7489

    13. Mai 2016 um 13:07 Uhr

  • Die Dinge könnten sich zwischendurch ein wenig geändert haben 4 und 5 bezüglich Eloquent oder Query Builder. Du kannst es versuchen DB::getPdo()->lastInsertId(); oder wenn Sie verwenden DB Fassade zum Einfügen und Abrufen der zuletzt eingefügten ID: DB::table('users')->insertGetId($user);

    – Ivanka Todorova

    13. Mai 2016 um 13:09 Uhr

  • Ich verwende Model zum Einfügen, DB::getPdo()->lastInsertId() gibt mir “0”.

    – fico7489

    13. Mai 2016 um 13:12 Uhr


Benutzeravatar von Leandro Parice
Leandro Parice

Das funktioniert bei mir: (PHP: 7.0 – Laravel 5.5)

use DB;

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

  • es funktioniert PHP:8.0 Laravel:8.7

    – Raskul

    26. Januar um 12:02 Uhr

  • es funktioniert PHP:7.4.19 Laravel:8.83.3

    – Nasir Usmann

    25. März um 3:33

  • MySQL wird diese Informationen zwischenspeichern, sodass die Nummer möglicherweise nicht richtig ist. Sie ändern die MySQL-Caching-Zeit auf Null, dann ist sie korrekt.

    – Kent Liau

    1. Juni um 9:15

Benutzeravatar von Sergey.R
Sergej.R

Sie müssen eine MySQL-Abfrage ausführen, um eine automatisch generierte ID zu erhalten.

show table status like 'users'

In Laravel5 können Sie wie folgt vorgehen.

public function getNextUserID() 
{

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

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

Benutzeravatar von pubudu sachintha
pubudu sachintha

Dies ist das Code-Snippet, das ich in Laravel verwendet habe und das perfekt funktionieren wird:

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

  • Bereits vor > 2 Jahren vorgeschlagen. stackoverflow.com/a/43702149

    – Mike32

    7. Dezember 2021 um 23:07 Uhr

Für 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;
    }
}

Das Model:

<?php // User.php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    use GetNextSequenceValue;
}

Das Ergebnis:

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

In Laravel5 können Sie wie folgt vorgehen.

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

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

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

Benutzeravatar von Anshul Lonkar
Anshul Lonkar

In MySQL können Sie durch diese Abfrage eine automatisch generierte ID erhalten.

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

Versuche dies:

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

1404360cookie-checkWie bekomme ich die nächste ID des automatisch generierten Felds in Laravel für eine bestimmte Tabelle?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy