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

السؤال

نشر

لدي هذا البرنامج لاستخراج مجموعة صفوف

$query = UserSubject::where('user_id', Auth::id())->select('subject_id')->get();

يقوم باسترجاع القيم كالآتي (مثلا)

[{"user_id":8,"subject_id":9},{"user_id":8,"subject_id":2}]

أرغب بتخزينهم مباشرة في جدول آخر يحتوي على حقلين ('user_id', 'subject_id')

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

Recommended Posts

  • 0
نشر

يمكنك في Laravel إدراج عدة جداول بجملة واحدة, وذلك عن طريق تجميعهم في مصفوفة وتمريرها في النموذج الخاص بالجدول, كالتالي:

$data = [
    ['user_id'=>'1', 'subject_id'=> 140],
    ['user_id'=>'2', 'subject_id'=> 270],
    ...
];
Model::insert($data);

وفي البرنامج الخاص بك, فإنّ البيانات فعليًا مخزنة في المتغير $query فنقوم مباشرة بإدراجها في قاعدة البيانات :

Model::insert($query);

 

  • 0
نشر

نعم يُمكنك إستخدام التابع insert لعمل تخزين لعدة سجلات لكن يجب أن تكون السجلات على شكل مصفوفة فمثلا هنا:

$data = UserSubject::where('user_id', Auth::id())->select('subject_id')->get();

السجلات ستكون على هيئة collection بالتالي يجب عليك تغييرها إلى مصفوفة بإستخدام التابع toArray بهذا الشكل:

$data = UserSubject::where('user_id', Auth::id())
  ->select('subject_id')
  ->get()
  ->toArray();

ثم يُمكنك إستخدام insert:

Model::insert($data);

// أو 

DB::table('table_name')->insert($data);

و إلا سيُعطيك الخطأ التالي:

TypeError: Argument 1 passed to Illuminate\Database\Query\Builder::insert() must be of the type array, object given,

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...