2013-04-05 9 views
24

W Laravel 4, kiedy wykonujesz DB::insert(), w jaki sposób możesz uzyskać identyfikator wiersza, który właśnie został wstawiony? Podobne, co mamy z funkcją ->insertGetId(). Powodem użycia DB::insert() jest to, że jest to złożone zapytanie PostgreSQL, którego nie można zbudować przy użyciu Fluent.Zwróć nowy identyfikator z DB :: insert() w Laravel 4

Przykład zapytania:

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

Odpowiedz

35

Jeśli przyjrzeć Illuminate\Database\ConnectionInterface można zobaczyć, jak te funkcje są napisane. Niestety, DB::insert() zwraca wartość logiczną z PDOStatement::execute() i obecnie nie ma wartości DB::insertGetId(). Jeśli byłoby to przydatne, powinieneś poprosić o to na GitHub.

W tym czasie, powinieneś być w stanie korzystać z DB::getPdo()->lastInsertId()

+0

Dzięki Phil, to rzeczywista odpowiedź na pytanie! – jonlink

40

istnieje metoda insertGetId.

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

Dzięki, ale muszę przekazać zapytania SQL "RAW" do mojej bazy danych, więc używanie 'insertGetId' firmy Fluent nie pomoże. – Nyxynyx

+0

Ahhh przepraszam, że tęskniłem za tą częścią. – Blessing

+0

Dobrze, pomogło. Dziękuję Ci. – CodeGuru

0

Jeśli znajdziesz się w złożonej strukturze, lepiej użyć Wymowy.

Najlepszą rzeczą, że trzeba przeglądu dokumenty:

http://laravel.com/docs/eloquent

+0

W zapytaniach nie ma wiele rzeczy, które można zrobić z Eloquent, których nie można zrobić z Fluent, często wygodniej jest robić to z Eloquent. –

+0

Oczywiście możesz zrobić wszystko. Ale struktura bazy danych oparta na klasach jest sensowna i łatwa do refaktoryzacji w przyszłości. –

+0

To prawda, ale nie jest to odpowiedź. W moim przypadku (i być może OP), Eloquent musiałby wykonywać wiele wywołań db, mogę to zrobić w jednym zapytaniu SQL. – jonlink

-1

Po zapisaniu danych do DB po prostu zadzwonić $insertedId = $user->id; gdzie $user->save() nazywa się przed etapem.

więcej informacji here

+0

Wygląda na to, że nie przeczytałeś pytania. – jonlink

7

Istnieje metoda insertGetId(), co następuje:

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