web-dev-qa-db-ja.com

最後に挿入したIDを取得する Laravel 雄弁な

私は現在テーブルにデータを挿入するために以下のコードを使用しています:

<?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);
    }
}

最後に挿入されたIDを返したいのですが、取得方法がわかりません。

敬具!

229
SoldierCorp

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);
313
xdazz

xdazz はこの場合は正しいですが、DB::statementまたはDB::insertを使用している可能性のある将来の訪問者のために、別の方法があります。

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

Jeffrey Wayが彼のLaracasts 5チュートリアルでModel::create()をどのように使っているかを好む人のために、コントローラの各フィールドを明示的に設定せずに大量の割り当てにモデルの$fillableを使うことなく、Requestを直接データベースに送ります。私はinsertGetId()を使っている人をたくさん読んでいますが、残念ながらこれは$fillableホワイトリストを尊重していないので、_tokenやデータベースのフィールド以外のものを挿入しようとするとエラーが発生してしまいますマスアサインメントを使用し、可能な限り全体的に少ないコードを記述したいので、これは私を困惑させました。幸いなことにEloquentの createメソッド はsaveメソッドをラップしているだけなので(@xdazzが上記で引用したもの)、最後に作成したIDを引き出すことができます...

public function store() {

    $input = Request::all();
    $id = Company::create($input)->id;

    return redirect('company/'.$id);
}
50
dave

テーブルに自動インクリメントIDがある場合は、insertGetIdメソッドを使用してレコードを挿入してからIDを取得します。

$id = DB::table('users')->insertGetId([
    'email' => '[email protected]',
    'votes' => 0
]);

参照してください: https://laravel.com/docs/5.1/queries#inserts

36
Aamir

**** Laravel ****

最初にオブジェクトを作成し、それからそのオブジェクトの属性値を設定し、そしてオブジェクトレコードを保存し、そして最後に挿入されたIDを取得します。といった

$user = new User();        

$user->name = 'John';  

$user->save();

//今すぐ最後に挿入されたID

$insertedId = $user->id;

echo $insertedId ;
36
Majbah Habib

笑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;
    }
}
15
Mujibur

これはlaravel 4.2で私のために働きました

$id = User::insertGetId([
    'username' => Input::get('username'),
    'password' => Hash::make('password'),
    'active'   => 0
]);
12
user28864

これが例です:

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);
}
11
ngakak

Laravel 4に最後に挿入されたIDを取得する方法は次のとおりです -

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.');
    }
9
Qamar Uzman

insertGetIdを使用して、同時にidを挿入および挿入します

doc から

テーブルに自動インクリメントIDがある場合は、insertGetIdメソッドを使用してレコードを挿入してからIDを取得します。

によって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 を参照してください。

8
Niklesh Raut

モデルを保存した後、初期化されたインスタンスは次のIDを持ちます。

$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
4
Amir

後に

$data->save()

$data->idはあなたに挿入されたIDを与えるでしょう、

注: - 自動インクリメント列の名前が sno の場合、$data->snoではなく$data->idを使用してください。

2
Abhishek Goel

Laravelの場合、新しいレコードを挿入して$data->save()を呼び出すと、この関数はINSERTクエリを実行し、主キーの値(デフォルトでは id )を返します。

以下のコードを使用することができます。

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

Laravel 5.2では、できるだけきれいにします。

public function saveContact(Request $request, Contact $contact)
{
   $create = $contact->create($request->all());
   return response()->json($create->id,  201);
}
2
bobbybackblech
$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);
2
Kamal Maisuriya

Insert()の場合

Example:

$ data1 =配列( 'company_id' => $ company_id、 'branch_id' => $ branch_id);

        $insert_id = CreditVoucher::insert($data1);
        $id = DB::getPdo()->lastInsertId();
        dd($id);
2
Faridul Khan

Saving データベースのレコードを保存した後、$data->idによって id にアクセスできます。

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

あなたはこれを行うことができます:

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

$lastInsertId=app('db')->getPdo()->lastInsertId();
1

この質問は少し古いですが。私の迅速で汚い解決策は次のようになります。

$last_entry = Model::latest()->first();

しかし、非常に頻繁に使用されるデータベースの競合状態に対して脆弱だと思います。

0
dustypaws

最短の方法は、おそらくモデル上で refresh() を呼び出すことです。

public function create(array $data): MyModel
{
    $myModel = new MyModel($dataArray);
    $myModel->saveOrFail();
    return $myModel->refresh();
}
0
automatix

データベースに最後に挿入されたIDを取得するには

$data = new YourModelName;
$data->name = 'Some Value';
$data->email = '[email protected]';
$data->save();
$lastInsertedId = $data->id;

ここで$ lastInsertedIdはあなたに最後に挿入された自動インクリメントIDを与えます。

0
PPL

$data->save()を保存した後。すべてのデータは$data内にプッシュされます。これはオブジェクトであり、現在の行は最近$data内に保存されたばかりです。最後のinsertId$data->idの中にあります。

応答コードは次のようになります。

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

オプションの方法は次のとおりです。

$lastID = DB::table('EXAMPLE-TABLE')
                ->orderBy('id', 'desc')
                ->first();

$lastId = $lastProduct->id;

Laravel 5.8バージョンからのソース

Saveメソッドを呼び出す同じオブジェクトで最後に挿入されたIDを取得できます。

$data->save();
$inserted_id = $data->id;

だからあなたは簡単に書くことができます:

if ($data->save()) {
    return Response::json(array('success' => true,'inserted_id'=>$data->id), 200);
}
0
Maxpoint

雄弁モデルの使用

$user = new Report();        
$user->email= '[email protected]';  
$user->save();
$lastId = $user->id;

クエリービルダーの使用

$lastId = DB::table('reports')->insertGetId(['email' => '[email protected]']);
0
srmilon