2013-04-05 2 views
24

Dans Laravel 4, lorsque vous exécutez un DB::insert(), comment pouvez-vous obtenir l'ID de la ligne qui vient d'être insérée? Similaire à ce que nous avons avec la fonction ->insertGetId(). Raison de l'utilisation DB::insert() est que c'est une requête PostgreSQL complexe qui ne peut pas être construit en utilisant Fluent.Renvoyer un nouvel ID avec DB :: insert() dans Laravel 4

Exemple de requête:

$newId = DB::insert('insert into users (id, name) values (?, ?)', array(1, 'Dayle')); 
echo $newId; // returns 1 

Répondre

35

Si vous jetez un oeil à Illuminate\Database\ConnectionInterface vous pouvez voir comment ces fonctions sont écrites. Malheureusement DB::insert() renvoie un booléen de PDOStatement::execute() et il n'y a pas DB::insertGetId() en ce moment. Si cela vous serait utile, vous devriez le demander sur GitHub.

Dans le même temps, vous devriez être en mesure d'utiliser DB::getPdo()->lastInsertId()

+0

Merci Phil, c'est la réponse réelle à la question! – jonlink

40

Il existe une méthode insertGetId.

$id = DB::table('users')->insertGetId(
    array('id' => 1, 'name' => 'Dayle Rees') 
); 
+3

Merci, mais je dois passer des instructions SQL 'RAW' à ma base de données, donc l'utilisation de' insertGetId' de Fluent ne m'aidera pas vraiment. – Nyxynyx

+0

Ahhh désolé j'ai raté cette partie. – Blessing

+0

Nice, Qui a aidé. Je vous remercie. – CodeGuru

0

Si vous obtenez dans la structure complexe, mieux utiliser Eloquent.

La meilleure chose que vous avez besoin docs d'examen:

http://laravel.com/docs/eloquent

+0

Dans les termes d'interrogation, il y a peu de choses que vous pouvez faire avec Eloquent que vous ne pouvez pas faire avec Fluent, c'est souvent plus pratique de le faire avec Eloquent. –

+0

Bien sûr, vous pouvez tout faire. Mais la structure de base de données basée sur les classes est logique et facile à refactoriser à l'avenir .. –

+0

Vrai, mais pas vraiment une réponse. Dans mon cas (et peut-être le PO) Eloquent aurait dû faire beaucoup d'appels de base de données, je peux accomplir la même chose en une seule requête SQL. – jonlink

-1

Après avoir enregistré les données dans la base de données que vous appelez juste $insertedId = $user->id;$user->save() est appelé avant l'étape.

plus d'info here

+0

Il semble que vous n'avez pas lu la question. – jonlink

7

Il existe une méthode insertGetId(), comme suit:

$dataset = array('column_id' => 1, 'name' => 'Dayle'); 
$column_id = DB::table('users')->insertGetId($dataset,'column_id'); 
Questions connexes