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("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);
}
}
и я хочу вернуть последний ID вставленной, но я не знаю как его получить.
С уважением!
22 ответов:
после
save,$data->idдолжен быть вставлен последний идентификатор.return Response::json(array('success' => true, 'last_insert_id' => $data->id), 200);для обновленной версии laravel попробуйте это
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белый список, так что вы получите ошибки с ним, пытаясь вставить _token и все, что не является поле в базе данных, в конечном итоге все нужно фильтровать и т. д. Это меня расстроило, потому что я хочу использовать массовое назначение и в целом писать меньше кода, когда это возможно. К счастью красноречивыхcreateметод просто обертывает метод сохранения (что @xdazz цитируется выше), так что вы все еще можете вытащить последний созданный идентификатор...public function store() { $input = Request::all(); $id = Company::create($input)->id; return redirect('company/'.$id); }
если таблица имеет автоматически увеличивающийся идентификатор, используйте метод insertGetId для вставки записи, а затем извлеките идентификатор:
$id = DB::table('users')->insertGetId([ 'email' => '[email protected]', 'votes' => 0 ]);
* * * * Для Laravel****
сначала создайте объект, затем установите значение атрибутов для этого объекта, затем сохраните запись объекта, а затем получите последний вставленный идентификатор. например,
$user = new User(); $user->name = 'John'; $user->save();// теперь получаем последний вставленный id
$insertedId = $user->id; echo $insertedId ;
в 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
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 4.2
$id = User::insertGetId([ 'username' => Input::get('username'), 'password' => Hash::make('password'), 'active' => 0 ]);
использовать
insertGetIdвставить и вставляешьidв то же времяС doc
если таблица имеет идентификатор автоматического увеличения, используйте метод insertGetId чтобы вставить запись и затем получить идентификатор:
By
Model$id = Model::insertGetId(["name"=>"Niklesh","email"=>"[email protected]"]);By
DB$id = DB::table('users')->insertGetId(["name"=>"Niklesh","email"=>"[email protected]"]);для более подробной информации:https://laravel.com/docs/5.5/queries#inserts
после сохранения модели, инициализированный экземпляр имеет код:
$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
после экономия запись в базе данных, вы можете получить доступ к id by
$data->idreturn Response::json(['success' => true, 'last_insert_id' => $data->id], 200)
в Laravel 5.2 я бы сделал его как можно более чистым:
public function saveContact(Request $request, Contact $contact) { $create = $contact->create($request->all()); return response()->json($create->id, 201); }
для Laravel, если вы вставляете новую запись и вызываете
$data->save()эта функция выполняет запрос INSERT и возвращает значение первичного ключа (т. е. id по умолчанию).Вы можете использовать следующий код:
if($data->save()) { return Response::json(array('status' => 1, 'primary_id'=>$data->id), 200); }
после
$data->save()
$data->idдаст вам вставленный идентификатор,Примечание: если имя столбца автоинкремента СНО затем вы должны использовать
$data->sno, а не$data->id
вы можете сделать это:
$result=app('db')->insert("INSERT INTO table..."); $lastInsertId=app('db')->getPdo()->lastInsertId();
$objPost = new Post; $objPost->title = 'Title'; $objPost->description = 'Description'; $objPost->save(); $recId = $objPost->id; // If Id in table column name if other then id then user the other column name return Response::json(['success' => true,'id' => $recId], 200);
Используя Красноречивую Модель
$user = new Report(); $user->email= '[email protected]'; $user->save(); $lastId = $user->id;С Помощью Построителя Запросов
$lastId = DB::table('reports')->insertGetId(['email' => '[email protected]']);
для получения последнего вставленного идентификатора в базе данных Вы можете использовать
$data = new YourModelName; $data->name = 'Some Value'; $data->email = '[email protected]'; $data->save(); $lastInsertedId = $data->id;здесь $lastInsertedId даст вам последний вставленный идентификатор автоматического приращения.
После Сохранения
$data->save(). все данные помещаются внутрь$data. Так как это объект и текущая строка только что сохранена внутри$data. так что последнийinsertIdбудет находится внутри$data->id.код ответа будет:
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 }
Используя Красноречивую Модель
use App\Company; public function saveDetailsCompany(Request $request) { $createcompany=Company::create(['nombre'=>$request->input('name'),'direccion'=>$request->input('address'),'telefono'=>$request->input('phone'),'email'=>$request->input('emaile'),'giro'=>$request->input('type')]); // Last Inserted Row ID echo $createcompany->id; }С Помощью Построителя Запросов
$createcompany=DB::table('company')->create(['nombre'=>$request->input('name'),'direccion'=>$request->input('address'),'telefono'=>$request->input('phone'),'email'=>$request->input('emaile'),'giro'=>$request->input('type')]); echo $createcompany->id;для получения дополнительных методов последнего вставленного идентификатора строки в Laravel : http://phpnotebook.com/95-laravel/127-3-methods-to-get-last-inserted-row-id-in-laravel
Comments