В настоящее время я использую этот код для вставки данных в таблицу:
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] );
**** Для 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();