Obecnie używam poniższego kodu do wstawiania danych do tabeli:
<?php
public function saveDetailsCompany()
{
$post = Input::All();
$data = new Company;
$data->nombre = $post['name'];
$data->direccion = $post['address'];
$data->telefono = $post['phone'];
$data->email = $post['email'];
$data->giro = $post['type'];
$data->fecha_registro = date("Y-m-d H:i:s");
$data->fecha_modificacion = date("Y-m-d H:i:s");
if ($data->save()) {
return Response::json(array('success' => true), 200);
}
}
Chcę zwrócić ostatni wstawiony identyfikator, ale nie wiem, jak go uzyskać.
Z poważaniem!
0
. W moim przypadku id był ciągiem (UUID) i aby to zadziałało, musiałem dodaćpublic $incrementing = false;
w moim modelu.aid
i ustawiłem,$incrementing = false;
ale też nie zwrócił!xdazz ma rację w tym przypadku, ale z korzyścią dla przyszłych użytkowników, którzy mogą korzystać
DB::statement
lubDB::insert
istnieje inny sposób:źródło
$id = DB::table('someTable')->insertGetId( ['field' => Input['data']);
timestamps
za pomocąinsertGetId
, uprzejmie sprawdź tutajinsertGetId
Działa także tylko wtedy, gdy kolumny id są faktycznie nazywane „id”.Dla każdego, kto lubi również sposób, w jaki Jeffrey Way wykorzystuje
Model::create()
w swoich tutorialach Laracast 5, w których po prostu wysyła żądanie bezpośrednio do bazy danych bez jawnego ustawiania każdego pola w kontrolerze i używania modelu$fillable
do masowego przypisywania (bardzo ważne, dla każdego nowego i używającego w ten sposób): Czytam wiele osób korzystających,insertGetId()
ale niestety nie szanuje$fillable
białej listy, więc wystąpią błędy podczas próby wstawienia _token i wszystkiego, co nie jest polem w bazie danych, w końcu ustawianie rzeczy, które chcesz filtr itp. To mnie zaskoczyło, ponieważ chcę użyć przypisania masy i ogólnie napisać mniej kodu, jeśli to możliwe. Na szczęściecreate
metoda Eloquenta po prostu otacza metodę zapisywania (co przytoczono powyżej @xdazz), więc nadal możesz pobrać ostatnio utworzony identyfikator ...źródło
$new = Company::create($input);
return redirect('company/'.$new->id);
Jeśli tabela ma identyfikator automatycznego przyrostu, użyj metody insertGetId, aby wstawić rekord, a następnie pobierz identyfikator:
Patrz: https://laravel.com/docs/5.1/queries#inserts
źródło
**** For Laravel ****
Najpierw utwórz obiekt, następnie ustaw wartość atrybutów dla tego obiektu, następnie zapisz rekord obiektu, a następnie pobierz ostatni wstawiony identyfikator. Jak na przykład
// Teraz pobierany ostatni wstawiony identyfikator
źródło
W Laravel 5: możesz to zrobić:
źródło
Oto przykład:
źródło
Działa to dla mnie w Laravel 4.2
źródło
Oto, w jaki sposób możemy uzyskać ostatni wstawiony identyfikator w Laravel 4
źródło
Służy
insertGetId
do wstawiania i wstawianiaid
jednocześnieOd dok
Przez
Model
Przez
DB
Aby uzyskać więcej informacji: https://laravel.com/docs/5.5/queries#inserts
źródło
Po zapisaniu modelu zainicjowana instancja ma identyfikator:
źródło
Dla wstawiania ()
Przykład:
źródło
W Laravel 5.2 uczynię go tak czystym, jak to możliwe:
źródło
Po
$data->id
da ci wstawiony identyfikator,Uwaga: Jeśli nazwa kolumny z autoinkrementacją to sno , powinieneś jej użyć,
$data->sno
a nie$data->id
źródło
Po zapisaniu rekordu w bazie danych możesz uzyskać dostęp do identyfikatora przez
$data->id
źródło
W przypadku Laravela, jeśli wstawisz nowy rekord i wywołasz
$data->save()
tę funkcję, uruchomi się zapytanie INSERT i zwróci wartość klucza podstawowego (tzn. Domyślnie id ).Możesz użyć następującego kodu:
źródło
źródło
Możesz to zrobić:
źródło
Aby uzyskać ostatni wstawiony identyfikator w bazie danych, możesz użyć
tutaj $ lastInsertedId daje ci ostatni wstawiony identyfikator automatycznego przyrostu.
źródło
Najkrótszą drogą jest prawdopodobnie wywołanie
refresh()
modelu:źródło
Chociaż to pytanie jest trochę przestarzałe. Moje szybkie i brudne rozwiązanie wyglądałoby tak:
Ale myślę, że jest podatny na warunki wyścigowe w bardzo często odwiedzanych bazach danych.
źródło
Możesz także spróbować w ten sposób:
źródło
Korzystanie z elokwentnego modelu
Korzystanie z Kreatora zapytań
źródło
Po zapisaniu
$data->save()
. wszystkie dane są wpychane do środka$data
. Ponieważ jest to obiekt, a bieżący wiersz został właśnie zapisany w środku$data
. więc ostatniinsertId
znajdzie się w środku$data->id
.Kod odpowiedzi będzie:
źródło
Opcjonalną metodą będzie:
Źródło z wersji Laravel 5.8
źródło
Ostatni wstawiony identyfikator możesz uzyskać za pomocą tego samego obiektu, który nazywasz metodą save;
Możesz więc po prostu napisać:
źródło
Możesz łatwo pobrać ostatnio wstawiony identyfikator rekordu
To niesamowita sztuczka, aby pobrać identyfikator z ostatniego wstawionego rekordu w bazie danych.
źródło
$user->id
utworzeniu wystarczy zrobić , aby uzyskać wstawiony identyfikator.źródło
Korzystanie z elokwentnego modelu
Korzystanie z Kreatora zapytań
Aby uzyskać więcej metod uzyskania identyfikatora Last Inserted Row w Laravel: http://phpnotebook.com/95-laravel/127-3-methods-to-get-last-inserted-row-id-in-laravel
źródło
Możesz użyć
$this
zmiennej konstruktora, aby uzyskać „Last Inserted Id using Laravel Eloquent” (bez dodawania dodatkowej kolumny) w bieżącej funkcji lub kontrolerze.źródło