Ich suche sowas wie:
DB::table('users')->getNextGeneratedId();
nicht
$user->save($data)
$getNextGeneratedId = $user->id;
Weiß jemand, wie man das erreicht?
fico7489
Ich suche sowas wie:
DB::table('users')->getNextGeneratedId();
nicht
$user->save($data)
$getNextGeneratedId = $user->id;
Weiß jemand, wie man das erreicht?
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
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]);
}
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'];
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();
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
und5
bezüglich Eloquent oder Query Builder. Du kannst es versuchenDB::getPdo()->lastInsertId();
oder wenn Sie verwendenDB
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