Laravel, получите последний идентификатор вставки, используя Eloquent

В настоящее время я использую этот код для вставки данных в таблицу:

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("Ymd H:i:s"); $data->fecha_modificacion = date("Ymd H:i:s"); if($data->save()) { return Response::json(array('success' => true), 200); } } 

И я хочу вернуть последний идентификатор, но я не знаю, как его получить.

С уважением!

После save , $data->id должен быть последним вставленным id.

 return Response::json(array('success' => true, 'last_insert_id' => $data->id), 200); 

В этом случае xdazz прав, но для будущих посетителей, которые могут использовать DB::statement или DB::insert , существует другой способ:

 DB::getPdo()->lastInsertId(); 

Для тех, кому также нравится, как Джеффри Уэй использует Model::create() в своих учебниках Laracasts 5, где он просто отправляет запрос прямо в базу данных, не указывая явно каждое поле в контроллере и используя $fillable для массового присвоения модели ( очень важно, для кого-то нового и использующего этот способ): я читал много людей, использующих insertGetId() но, к сожалению, это не соответствует $fillable whitelist, поэтому вы получите ошибки с ним, пытаясь вставить _token и все, что не поле в базе данных, в конечном итоге настройте объекты, которые вы хотите фильтровать, и т. д. Это подтолкнуло меня, потому что я хочу использовать массовое назначение и в целом писать меньше кода, когда это возможно. К счастью, метод create Eloquent просто обертывает метод save (то, что указано выше @xdazz), поэтому вы можете потянуть последний созданный ID …

 public function store() { $input = Request::all(); $id = Company::create($input)->id; return redirect('company/'.$id); } 

Если таблица имеет идентификатор автоинкремента, используйте метод insertGetId, чтобы вставить запись, а затем получить идентификатор:

  $id = DB::table('users')->insertGetId( ['email' => 'john@example.com', 'votes' => 0] ); 

См. https://laravel.com/docs/5.1/queries#inserts

**** Для Laravel ****

Сначала создайте объект, затем установите значение атрибута для этого объекта. Затем сохраните запись объекта и затем получите последний вставленный идентификатор. такие как

 $user = new User(); $user->name = 'John'; $user->save(); 

// Теперь Получение последнего вставленного id

 $insertedId = $user->id; echo $insertedId ; 

Вот как мы можем получить последний вставленный идентификатор в Laravel 4

 public function store() { $input = Input::all(); $validation = Validator::make($input, user::$rules); if ($validation->passes()) { $user= $this->user->create(array( 'name' => Input::get('name'), 'email' => Input::get('email'), 'password' => Hash::make(Input::get('password')), )); $lastInsertedId= $user->id; //get last inserted record's user id value $userId= array('user_id'=>$lastInsertedId); //put this value equal to datatable column name where it will be saved $user->update($userId); //update newly created record by storing the value of last inserted id return Redirect::route('users.index'); } return Redirect::route('users.create')->withInput()->withErrors($validation)->with('message', 'There were validation errors.'); } 

В laravel 5: вы можете сделать это:

 use App\Http\Requests\UserStoreRequest; class UserController extends Controller { private $user; public function __construct( User $user ) { $this->user = $user; } public function store( UserStoreRequest $request ) { $user= $this->user->create([ 'name' => $request['name'], 'email' => $request['email'], 'password' => Hash::make($request['password']) ]); $lastInsertedId= $user->id; } } 

вот пример

  public static function saveTutorial(){ $data = Input::all(); $Tut = new Tutorial; $Tut->title = $data['title']; $Tut->tutorial = $data['tutorial']; $Tut->save(); $LastInsertId = $Tut->id; return Response::json(array('success' => true,'last_id'=>$LastInsertId), 200); } 

Это работало для меня в laravel 4.2

 $data = array('username'=>Input::get('username'), 'password'=>Hash::make('password'), 'active'=>0); $id = User::insertGetId($data); 

После сохранения записи в базе данных вы можете получить доступ к id с помощью $data->id

 return Response::json(['success' => true, 'last_insert_id' => $data->id], 200) 

после сохранения модели инициализированный экземпляр имеет идентификатор

 $report = new Report(); $report->user_id = $request->user_id; $report->patient_id = $request->patient_id; $report->diseases_id = $request->modality; $isReportCreated = $report->save(); return $report->id; // this will return the saved report id 

В Laravel 5.2 я сделал бы это как можно более чистым:

 public function saveContact(Request $request, Contact $contact) { $create = $contact->create($request->all()); return response()->json($create->id, 201); } 

После

 $data->save() 

$data->id даст вам вставленный идентификатор,

Примечание. Если ваше имя столбца автоинкремента является sno, тогда вы должны использовать $data->sno а не $data->id

Используйте insertGetId для вставки и ввода вставленного id одновременно

Из документа

Если таблица имеет идентификатор автоинкремента, используйте метод insertGetId, чтобы вставить запись, а затем получить идентификатор:

По Model

 $id = Model::insertGetId(["name"=>"Niklesh","email"=>"myemail@gmail.com"]); 

По DB

 $id = DB::table('users')->insertGetId(["name"=>"Niklesh","email"=>"myemail@gmail.com"]); 

Для получения дополнительной информации: https://laravel.com/docs/5.5/queries#inserts

Для Laravel, если вы вставляете новую запись и вызываете $data->save() эта функция выполняет запрос INSERT и возвращает значение первичного ключа (то есть id по умолчанию).

Вы можете использовать следующий код:

 if($data->save()) { return Response::json(array('status' => 1, 'primary_id'=>$data->id), 200); } 

После сохранения $ data-> save (). все данные помещаются внутри $ data. Поскольку это объект, и текущая строка только что сохраняется недавно внутри $ data. поэтому последний insertId будет найден внутри $ data-> id.So код Resospnse будет …

 return Response::json(array('success' => true, 'last_insert_id' => $data->id), 200); 
 public function store( UserStoreRequest $request ) { $input = $request->all(); $user = User::create($input); $userId=$user->id } 

Использование Eloquent Model

 $user = new Report(); $user->email= 'johndoe@example.com'; $user->save(); $lastId = $user->id; 

Использование Query Builder

 $lastId = DB::table('reports')->insertGetId(['email' => 'johndoe@example.com']); 

Вы можете сделать это:

 $result=app('db')->insert("INSERT INTO table..."); $lastInsertId=app('db')->getPdo()->lastInsertId();