2013-04-05 16 views
24

In Laravel 4, quando si esegue un DB::insert(), come si può ottenere l'ID della riga che è stata appena inserita? Simile a quello che abbiamo con la funzione ->insertGetId(). Il motivo dell'utilizzo di DB::insert() è che è una query PostgreSQL complessa che non può essere creata utilizzando Fluent.Restituisce un nuovo id con DB :: insert() in Laravel 4

Esempio Domanda:

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

risposta

35

Se si dà un'occhiata a Illuminate\Database\ConnectionInterface si può vedere come queste funzioni sono scritte. Purtroppo DB::insert() restituisce un valore booleano da PDOStatement::execute() e al momento non è disponibile lo DB::insertGetId(). Se questo sarebbe utile, dovresti richiederlo su GitHub.

Nel frattempo, si dovrebbe essere in grado di utilizzare DB::getPdo()->lastInsertId()

+0

Grazie Phil, questa è la risposta reale alla domanda! – jonlink

40

C'è un metodo insertGetId.

+3

Grazie, ma ho bisogno di passare le istruzioni SQL 'RAW' al mio database, quindi l'uso di' insertGetId' di Fluent non sarà di grande aiuto. – Nyxynyx

+0

Ahhh scusa, ho perso quella parte. – Blessing

+0

Bello, questo ha aiutato. Grazie. – CodeGuru

0

Se si entra in una struttura complessa, è meglio usare Eloquent.

cosa migliore che è necessario recensione docs:

http://laravel.com/docs/eloquent

+0

Nella ricerca di termini c'è poco che puoi fare con Eloquent che non puoi fare con Fluent, spesso è più conveniente farlo con Eloquent. –

+0

Certo che puoi fare tutto. Ma la struttura di Database basata su classi ha senso e facile da refactoring in futuro. –

+0

Vero, ma non proprio una risposta. Nel mio caso (e forse negli OP) Eloquent avrebbe dovuto fare molte chiamate db, posso realizzare lo stesso in una sola query SQL. – jonlink

-1

Dopo aver salvato i dati nel DB basta chiamare $insertedId = $user->id; dove $user->save() è chiamato prima della fase.

maggiori informazioni here

+0

Sembra che tu non abbia letto la domanda. – jonlink

7

C'è un metodo insertGetId(), come segue:

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