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?
Vous pouvez utiliser cette méthode d'agrégation et l'incrémenter:
$nextId = DB::table('users')->max('id') + 1;
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]);
}
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;
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'];
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());
}
}
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();
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"
$next_user_id = User::max('id') + 1;