В настоящее время я использую приведенный ниже код для вставки данных в таблицу:
<?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);
}
}
Я хочу вернуть последний идентификатор, но я не знаю, как его получить.
С уважением!
После save
, $data->id
должен быть последним вставленным 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();
$id = DB::table('someTable')->insertGetId( ['field' => Input['data']);
Для тех, кому также нравится, как Джеффри Уэй использует Model::create()
в своих учебниках Laracasts 5, где он просто отправляет запрос прямо в базу данных, явно не устанавливая каждое поле в контроллере и используя модель $fillable
для массового присвоения (очень важно, для кого-то нового и использующего этот способ): я читал много людей, использующих insertGetId()
, но, к сожалению, это не соответствует белым спискам $fillable
, поэтому вы получите ошибки с ним, пытаясь вставить _token и все, что есть 't поле в базе данных, в конечном итоге установите то, что вы хотите фильтровать, и т.д. Это вытолкнуло меня, потому что я хочу использовать массовое назначение и в целом писать меньше кода, когда это возможно. К счастью, Ecoquent create
метод просто обертывает метод сохранения (то, что указано выше @xdazz), поэтому вы можете потянуть последний созданный ID...
public function store() {
$input = Request::all();
$id = Company::create($input)->id;
return redirect('company/'.$id);
}
$new = Company::create($input);
return redirect('company/'.$new->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;
}
}
Это работало для меня в laravel 4.2
$id = User::insertGetId([
'username' => Input::get('username'),
'password' => Hash::make('password'),
'active' => 0
]);
Вот пример:
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);
}
Вот как мы можем получить последний вставленный id в 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 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.');
}
Используйте insertGetId
для вставки и ввода вставленного id
одновременно
Из документа
Если таблица имеет идентификатор автоинкремента, используйте метод insertGetId, чтобы вставить запись, а затем получить идентификатор:
По Model
$id = Model::insertGetId(["name"=>"Niklesh","email"=>"[email protected]"]);
По 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
После
$data->save()
$data->id
предоставит вам вставленный идентификатор,
Примечание. Если ваше имя столбца автоинкремента sno, вы должны использовать
$data->sno
, а не $data->id
Для Laravel, если вы вставляете новую запись и вызываете $data->save()
, эта функция выполняет запрос INSERT и возвращает значение первичного ключа (то есть идентификатор по умолчанию).
Вы можете использовать следующий код:
if($data->save()) {
return Response::json(array('status' => 1, 'primary_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);
}
После сохранения записи в базе данных вы можете получить доступ id к $data->id
return Response::json(['success' => true, 'last_insert_id' => $data->id], 200)
$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);
Вы можете сделать это:
$result=app('db')->insert("INSERT INTO table...");
$lastInsertId=app('db')->getPdo()->lastInsertId();
Для вставки()
Example:
$ data1 = array ('company_id' => $ company_id, 'branch_id' => $ branch_id);
$insert_id = CreditVoucher::insert($data1);
$id = DB::getPdo()->lastInsertId();
dd($id);
Для получения последнего вставленного id в базе данных Вы можете использовать
$data = new YourModelName;
$data->name = 'Some Value';
$data->email = '[email protected]';
$data->save();
$lastInsertedId = $data->id;
здесь $ lastInsertedId даст вам последний добавленный идентификатор автоматического увеличения.
Использование Eloquent Model
$user = new Report();
$user->email= '[email protected]';
$user->save();
$lastId = $user->id;
Использование Query Builder
$lastId = DB::table('reports')->insertGetId(['email' => '[email protected]']);
После сохранения $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
}
Использование Eloquent Model
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;
}
Использование Query Builder
$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;
Дополнительные методы получения идентификатора Last Inserted Row в Laravel: http://phpnotebook.com/95-laravel/127-3-methods-to-get-last-inserted-row-id-in-laravel
0
. В моем случае идентификатором была строка (UUID), и чтобы это работало, мне нужно было добавитьpublic $incrementing = false;
в моей модели.