লারভেল স্পষ্টত ব্যবহার করে সর্বশেষ Inোকানো আইডি পান


294

আমি বর্তমানে একটি সারণীতে ডেটা toোকাতে নীচের কোডটি ব্যবহার করছি:

<?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োকানো শেষ আইডিটি ফিরিয়ে দিতে চাই তবে এটি কীভাবে পাওয়া যায় তা আমি জানি না।

আন্তরিক শুভেচ্ছা!

উত্তর:


378

সংরক্ষণের পরে , $data->idসর্বশেষ আইডি shouldোকানো উচিত।

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

এটি ব্যবহার করা যেতে পারে।

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

আপডেট করা লারাভেল সংস্করণের জন্য এটি ব্যবহার করে দেখুন

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

2
একটি অবজেক্ট সর্বদা একটি অবজেক্ট দেয়,। এটিই একমাত্র উপায়।
কাস ব্লিম

40
সাবধান হন যে আইডিটি স্বতঃসংশোধন না হলে এটি সর্বদা ফিরে আসবে 0। আমার ক্ষেত্রে আইডিটি একটি স্ট্রিং (ইউইউডি) ছিল এবং এটি কাজ করার জন্য public $incrementing = false;আমাকে আমার মডেলটি যুক্ত করতে হয়েছিল।
Lu:18s ক্রুজ

2
@ মিলজ আমার কাছে মাইএসকিউএল ট্রিগার রয়েছে যা নামের মতো একটি কাস্টম ফিল্ডের জন্য ইউইড তৈরি করে aidএবং আমি সেট করে ফেলেছি $incrementing = false;তবে এটিও ফিরে আসে না!
সৈয়দবাকআর 13

@ সৈয়দবাকআর সত্য বলার পরে, দয়া করে আপনি লারাভেল ডকের যে অংশটি পেয়েছেন তা এখানে চিহ্নিত করতে পারেন যেখানে আপনি এই অত্যন্ত গুরুত্বপূর্ণ তথ্যটি পেয়েছেন?
দামিলোলা ওলুওকেরে

@ দামিলোলাওলোকেরে এইটিই আমি আমার অ্যাপ্লিকেশনটিতে পেয়েছি যা লারাভেল ৫.৪ ব্যবহার করে।
সৈয়দবাকআর

121

xdazz এক্ষেত্রে সঠিক, তবে ভবিষ্যতের দর্শনার্থীদের সুবিধার জন্য যারা সম্ভবত ব্যবহার করছেন DB::statementবা DB::insertঅন্য উপায় আছে:

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

43
আসলে আপনি ঠিক এটি সন্নিবেশটিতে করতে পারেন$id = DB::table('someTable')->insertGetId( ['field' => Input['data']);
কেসি

1
@ ক্যাসি এইভাবে এটি করলে ডিবিতে টাইমস্ট্যাম্পগুলি আপডেট হবে না
রাফায়েল

@ রাফায়েল, আপনি যদি এটি timestampsব্যবহার করে আপডেট করতে চান তবে insertGetIdদয়া করে এখানে দেখুন
ফ্রাঙ্ক মায়াট থু

ঠিক অন্যদিন যা খুঁজছিলাম! এছাড়াও, insertGetIdকেবলমাত্র আইডি কলামগুলিকে "আইডি" বলা হলে কেবল কাজ করে।
ক্যাপ্টেন হাইপারটেক্সট

@ বেনুবার্ড, আপনার উত্তর অনুসারে আমি আমার সমাধান পেয়েছি।
ভাভিন থুমার

57

জেফ্রি ওয়ে Model::create()তার লারাকাস্ট ৫ টি টিউটোরিয়ালে কীভাবে ব্যবহার করেন তা পছন্দ করে এমন প্রত্যেকের জন্য , যেখানে তিনি কন্ট্রোলারে প্রতিটি ক্ষেত্রের স্পষ্টভাবে সেট না করে সরাসরি মডেলটিকে ডেটাবেজে প্রেরণ করেন এবং মডেলটি $fillableভর অ্যাসাইনমেন্টের জন্য ব্যবহার করে (খুব গুরুত্বপূর্ণ, যে কেউ নতুন এবং ব্যবহার করে এই পদ্ধতিতে): আমি প্রচুর লোক ব্যবহার করে পড়েছি insertGetId()তবে দুর্ভাগ্যক্রমে $fillableএটি শ্বেতলিস্টকে সম্মান করে না তাই আপনি এটিতে _ টোকেন এবং ডেটাবেজে কোনও ক্ষেত্র নয় এমন কিছু সন্নিবেশ করানোর চেষ্টা করে ত্রুটিগুলি পেয়ে যাবেন, আপনার পছন্দসই জিনিসগুলি সেট আপ করুন ফিল্টার, ইত্যাদি। এটি আমাকে ধরিয়ে দিয়েছে, কারণ আমি ভর নিয়োগ ব্যবহার করতে চাই এবং সামগ্রিকভাবে কম কোড লিখতে চাইলে সম্ভব হয়। ভাগ্যক্রমে এলওভার্টের createপদ্ধতিটি কেবলমাত্র সেভ পদ্ধতিটি (যা উপরে @ xdazz উদ্ধৃত করা হয়েছে) মোড়ানো, যাতে আপনি এখনও শেষ তৈরি আইডিটি টানতে পারেন ...

public function store() {

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

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

2
এই উদাহরণটি আমার জন্য 5.1-তে কার্যকর হয়নি, তবে এটি করেছে:$new = Company::create($input); return redirect('company/'.$new->id);
টিমগাভিন

2
এটি ধরে নেওয়া হয় যে অনুরোধ ক্ষেত্রগুলির নামটি তাদের নিজ নিজ ডাটাবেস কলামগুলির মতো same যা সর্বদা ক্ষেত্রে হয় না (উদাহরণস্বরূপ উত্তরাধিকারের কোডগুলি) ..
মোশিদ

48

যদি টেবিলটিতে একটি স্বয়ং-বর্ধনশীল আইডি থাকে, একটি রেকর্ড সন্নিবেশ করার জন্য insertGetId পদ্ধতিটি ব্যবহার করুন এবং তারপরে আইডিটি পুনরুদ্ধার করুন:

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

রেফারেন্স: https://laravel.com/docs/5.1/queries#inserts


আপনি যা বর্ণনা করেছেন তা ফ্লুয়েন্ট ব্যবহার করে শেষ সন্নিবেশ ক্যাপচার করার মতো দেখাচ্ছে। প্রশ্ন ছিল প্রচ্ছন্ন সম্পর্কে। এটি আরও দেখতে হবে: $ আইডি = মডেল :: তৈরি করুন ('ভোট' => 0]) -> আইডি; উপরে এই উত্তরটি বর্ণনা অনুযায়ী: stackoverflow.com/a/21084888/436443
Jeffz

46

**** লারাভেলের জন্য ****

প্রথমে কোনও বস্তু তৈরি করুন, তারপরে সেই বস্তুর জন্য বৈশিষ্ট্যগুলির মান সেট করুন, তারপরে অবজেক্ট রেকর্ডটি সংরক্ষণ করুন এবং তারপরে সর্বশেষ .োকানো আইডি পান। যেমন

$user = new User();        

$user->name = 'John';  

$user->save();

// এখন সর্বশেষ sertedোকানো আইডি পাচ্ছে

$insertedId = $user->id;

echo $insertedId ;

16

লারাভেল 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

এখানে একটি উদাহরণ:

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

15

এটি আমার জন্য ল্যারাভেল ৪.২ এ কাজ করেছিল

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

11

লারাভেল 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.');
    }

11

Sert insertGetIdোকাতে এবং idএকই সাথে getোকাতে ব্যবহার করুন

ডক থেকে

যদি টেবিলটিতে একটি স্বয়ং-বর্ধনশীল আইডি থাকে, একটি রেকর্ড সন্নিবেশ করার জন্য 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


6

মডেলটি সংরক্ষণের পরে, প্রাথমিক অবস্থার আইডি রয়েছে:

$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

6

Sert োকানোর জন্য ()

উদাহরণ:

$data1 = array(
         'company_id'    => $company_id,
         'branch_id'        => $branch_id
     );

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

3

লারাভেল ৫.২ এ আমি এটি যথাসম্ভব পরিষ্কার করে তুলব:

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

3

পরে

$data->save()

$data->id আপনাকে idোকানো আইডি দেবে,

দ্রষ্টব্য: যদি আপনার স্বতঃসংশোধনের কলামের নামটি sno হয় তবে আপনার ব্যবহার করা উচিত $data->snoএবং না$data->id


2

পরে সংরক্ষণ ডেটাবেসের একটি রেকর্ড, আপনি অ্যাক্সেস করতে পারেন আইডি দ্বারা$data->id

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

2

লারাভেলের জন্য, আপনি যদি একটি নতুন রেকর্ড সন্নিবেশ করান এবং কল করুন $data->save()এই ফাংশনটি একটি INSERT কোয়েরি চালায় এবং প্রাথমিক কী মান (অর্থাত্ ডিফল্টরূপে আইডি ) প্রদান করে।

আপনি নিম্নলিখিত কোড ব্যবহার করতে পারেন:

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

2
$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);


1

ডাটাবেসে সর্বশেষ inোকানো আইডি পেতে আপনি ব্যবহার করতে পারেন

$data = new YourModelName;
$data->name = 'Some Value';
$data->email = 'abc@mail.com';
$data->save();
$lastInsertedId = $data->id;

এখানে $ lastInsertId আপনাকে সর্বশেষ autoোকানো অটো ইনক্রিমেন্ট আইডি দেয়।


1

সবচেয়ে সংক্ষিপ্ততম উপায়টি সম্ভবত refresh()মডেলের একটি কল :

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

1

যদিও এই প্রশ্নটি কিছুটা তারিখের। আমার দ্রুত এবং নোংরা সমাধানটি এর মতো দেখবে:

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

তবে আমি অনুমান করি যে এটি অত্যন্ত ঘন ঘন ডেটাবেসগুলিতে রেসের অবস্থার পক্ষে ঝুঁকির মধ্যে রয়েছে।


1
ধন্যবাদ! এটি আমি আমার পাইপলাইনে ব্যবহার করতে পারি। সুতরাং জাতি পরিস্থিতি এবং সুন্দর কোড সম্পর্কে কোনও উদ্বেগ নেই।
দান্ত্জে ২

1

আপনি এটির মতো চেষ্টাও করতে পারেন:

public function storeAndLastInrestedId() {
    $data = new ModelName();
    $data->title = $request->title;
    $data->save();

    $last_insert_id = $data->id;
    return $last_insert_id;
}

0

স্বচ্ছল মডেল ব্যবহার করা

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

জিজ্ঞাসা নির্মাতা ব্যবহার করে

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

0

সেভ করার পরে $data->save()। সমস্ত তথ্য ভিতরে ঠেলাঠেলি করা হয় $data। যেহেতু এটি একটি অবজেক্ট এবং বর্তমান সারিটি সম্প্রতি ভিতরে সঞ্চিত হয়েছে $data। সুতরাং শেষটি insertIdভিতরে খুঁজে পাওয়া যাবে $data->id

প্রতিক্রিয়া কোড হবে:

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


0

আপনি একই পদ্ধতিতে শেষ সন্নিবেশ করা আইডি পেতে পারেন যা আপনি সংরক্ষণ পদ্ধতি বলছেন;

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

সুতরাং আপনি সহজভাবে লিখতে পারেন:

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

0

আপনি সহজেই সর্বশেষ sertedোকানো রেকর্ড আইডি আনতে পারেন

$user = User::create($userData);
$lastId = $user->value('id');

ডিবিতে সর্বশেষ sertedোকানো রেকর্ড থেকে আইডি আনার একটি দুর্দান্ত কৌশল।


1
দৌড়ের অবস্থা ...
অ্যালেক্স

@ অ্যালেক্সের মতো? .....
আর গুরুং

একই সাথে দু'জন সমবর্তী ব্যবহারকারী কোম্পানির মডেলটিতে যুক্ত হন। এটি নির্ভরযোগ্য নয় কারণ সময় সঠিক হলে 1 ম পোস্টটি 2 য় আইডি পেতে পারে। গৃহীত উত্তরটি নির্ভরযোগ্য।
অ্যালেক্স

@ অ্যালেক্স দয়া করে পরীক্ষা করুন, এটি কাজ করছে এবং রেকর্ড থেকে সর্বশেষ idোকানো আইডি পাওয়ার সেরা সমাধান।
প্রিয়াঙ্কা প্যাটেল

আপডেট হওয়া সমাধানটি ঠিক আছে, তবে এটির জন্য গৃহীত উত্তরের চেয়ে আরও কোড দরকার। $user->idসন্নিবেশিত আইডিটি তৈরি করার পরে কেবল করাই যথেষ্ট।
অ্যালেক্স

-1
public function store( UserStoreRequest $request ) {
    $input = $request->all();
    $user = User::create($input);
    $userId=$user->id 
}

2
এই পোস্টটি উত্তর ছিল 3 বছর আগে। এটি কেন ব্যবহারকারীকে সহায়তা করতে পারে বা এটি কীভাবে ওপি-র প্রশ্নকে আরও ভালভাবে সমাধান করতে পারে সে সম্পর্কে আরও ব্যাখ্যা যুক্ত করতে আপনার উত্তরটি সম্পাদনা করুন।
সিফার করুন

1
এই কোড স্নিপেটের জন্য আপনাকে ধন্যবাদ, যা কিছু তাত্ক্ষণিক সহায়তা সরবরাহ করতে পারে। একটি সঠিক ব্যাখ্যা কেন এটি সমস্যার একটি ভাল সমাধান, তা দেখিয়ে তার শিক্ষাগত মানকে ব্যাপকভাবে উন্নত করবে এবং ভবিষ্যতের পাঠকদের জন্য একই, তবে অভিন্ন নয়, এমন প্রশ্নের সাথে আরও দরকারী করে তুলবে। দয়া করে ব্যাখ্যা যুক্ত করতে আপনার উত্তর সম্পাদনা করুন, এবং কোন সীমাবদ্ধতা এবং অনুমানগুলি প্রযোজ্য তা একটি ইঙ্গিত দিন। প্রশ্নের বয়স এবং আপনার উত্তরের নিম্নমানের কথা উল্লেখ না করা।
গ্রম্পি ক্রাউটন

-1

স্বচ্ছল মডেল ব্যবহার করা

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


-1

আপনি $thisবর্তমান ফাংশন বা নিয়ামকটিতে "লারভেল এলোভেন্ট ব্যবহার করে" শেষ সন্নিবেশিত আইডি "অর্জনের জন্য কনস্ট্রাক্টর ভেরিয়েবলটি ব্যবহার করতে পারেন (

public function store(Request $request){
    $request->validate([
        'title' => 'required|max:255',
        'desc' => 'required|max:5000'
    ]);

    $this->project = Project::create([
        'name' => $request->title,
        'description' => $request->desc,
    ]);

    dd($this->project->id);  //This is your current/latest project id
    $request->session()->flash('project_added','Project added successfully.');
    return redirect()->back();

}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.