اذهب إلى المحتوى

السؤال

نشر

لدي مشروع عبارى عن متجر إلكتروني وأريد أن أقوم بإضافة منتج جديد إلى قاعدة البيانات والحصول على المعرف id الخاص بهذا المنتج بمجرد إضافته:

$product = new Product;
$product->name = $request->name;
$product->price = $request->price;

$product->save();

كيف أعرف id الخاص بهذا المنتج في لارافيل Laravel؟

Recommended Posts

  • 1
نشر

يمكنك الحصول على المعرف الخاص بالنموذج مباشرة بعد حفظه كالتالي:

$product->save();

$product->id; // المعرّف

أو في حال كان حقل المعرف الأساسي للجدول من نوع Auto Increment فيمكنك الحصول على آخر نموذج تمت إضافته عبر الاستعلام التالي:

$product = Product::orderBy('id', 'desc')->first();

في هذه الحال يجب التأكد من أن نسخة واحدة من تطبيقك فقط تتعامل مع قاعدة البيانات، لتجنب إنشاء عنصر جديد من قبل نسخة أخرى قبل حصولك على جواب الاستعلام السابق فتحصل على جواب خاطئ

  • 1
نشر

يمكنك الحصول على الid بعد حفظ المنتج في قاعدة البيانات بواسطة الاسم الخاص به..

أي كالتالي.

$productId = Product::where('name', '=', $product->name)->first()->id;

هنا قمنا بعملية بحث داخل جدول المنتجات للحصول على المنتج مطابق للاسم .. ثم نحصل على المعرف الخاص به ونخزنه في المتغير productId

بهذه الطريقة يمكننا الحصول على ال id المنتج الذي تمت إضافته .. فيصبح الكود بشكل كامل ..

##عملية الإضافة
$product = new Product;
$product->name = $request->name;
$product->price = $request->price;
$product->save();

#عملية الحصول على المعرف
$productId = Product::where('name', '=', $product->name)->first()->id;

 

  • 1
نشر

بالإضافة الى الطرق التي قدمها المدربون يمكنك استخدام التابع insertGetId كالتالي

$id = Product::insertGetId(
	        ['name' => $request->name,'price' => $request->price]
	    );

ولكن لا تنسى في ملف نموذج Product ان تضيف الحقول الى الخاصية fillable كالتالي

protected $fillable=['name','price'];

 

  • 1
نشر

بجانب ما اقترحه المدربون يمكنك استعمال lastInsertId في حالة رغبت باستخدام insert K وهو احد توابع الواجهة DB التي تقوم بجلب آخر معرف لآخر عنصر تم ادراجه بشكل عام، يكون ذلك بعد تنفيذ الادراج: 

User::insert($data);

$id = DB::getPdo()->lastInsertId(); 

 

  • 1
نشر

يمكنك أن تستخدم max Function 

DB::table('products')->find(DB::table('products')->max('id'));

هذه ال function تجلب لك أكبر id موجود في products table .

والحل الثاني أنك تجلب جميع البيانات بالترتيب التنازلي Desc ، ثم تجلب أول عنصر من البيانات 

$products = Product::orderBy('id', 'desc')->first(); 

ولكن من ناحية ال performance الطريقة الاولى أفضل . 

ولاحظ في الطريقة الاولى ستتعامل مع Query Builder

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...