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

عند التعديل على سجل في laravel

Osama Kha

السؤال

اقوم بالتعديل على سجل ما يحوي السجل على تفاصيل وصورة احتاج الى طريقة لعدم اعادة طلب لتحميل الصورة اي يبقى محتفظ بالصورة القديمة بشكل تلقائي 

مشابهة لفكرة قيمة بدائية لحقل ما 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

تستطيع استخدام خاصية "fill" في النموذج Laravel، حيث يمكن تحديد الحقول التي يجب تعديلها وترك الحقول الأخرى بدون تعديل.

مثلاً، إذا كان لديك نموذج يحتوي على حقول "title" و "description" و "image" ، وتحتاج إلى تعديل "title" و "description" فقط دون تغيير الصورة، يمكنك القيام بذلك كما يلي:

public function update(Request $request, $id)
{
    $post = Post::findOrFail($id);
    $post->fill($request->only('title', 'description'));
    $post->save();

    return redirect()->back();
}

تم استخدام الدالة "fill" لتحديد الحقول "title" و "description" فقط وترك حقل الصورة دون تغيير، واستخدام الدالة "only" لتحديد الحقول المطلوبة فقط للتحديث.

وبذلك سيتم الاحتفاظ بالصورة القديمة في الحقل "image" دون الحاجة إلى إعادة تحميلها.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

بإمكانك إستثناء بعض الحقول من الطلب بإستعمال التابع except:

$input = $request->except(['input1', 'input2', ...]);

مثال:

<?php

public function update(Request $request, Admin $admin)
{
  // التحقق من البيانات
  $request->validate([
    'name' => ['required'],
    'email' => ['required', 'email', Rule::unique('admins', 'email')->ignore($admin->id)],
    'password' => ['sometimes', 'nullable', 'confirmed'],
    'image' => 'sometimes|nullable|' . v_images(),
    'role_id' => ['required', 'numeric', Rule::exists('roles', 'id')],
  ], [], [
    'name' => trans('site.name'),
    'email' => trans('site.email'),
    'password' => trans('site.password'),
    'role_id' => trans('site.role_id')
  ]);
  
  // إستثناء بعض الحقول التي تتطلب إجراءات إضافية
  $request_data = $request->except(['password', 'password_confirmation', 'image', 'role_id']);
  
  // تشفير كلمة المرور و إضافة القيمة للمصفوفة التي سيتم التعديل من خلالها
  if (request()->has('password') && !is_null($request->password))
    $request_data['password'] = bcrypt($request->password);
  
  // رفع صورة جديدة في حالة كان الطلب يحوي صورة جديدة
  // و إضافة مسار الصورة لمصفوفة البيانات
  if ($request->hasFile('image'))
    $request_data['image'] = up()->upload([
    'file' => 'image',
    'upload_type' => 'single',
    'path' => 'admin_images',
    'delete_file' => $admin->image
  ]);

  // التعديل
  $admin->update($request_data);
  $admin->syncRoles($request->role_id);
  session()->flash('success', __('site.updated_successfully'));
  return redirect()->route('dashboard.admins.index');
} // end of update
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

بالإضافة إلى الدوال `except()` و `only()`، يمكن استخدام الدالة `intersect()` للحصول على الحقول المتوفرة في الطلب فقط وتجاهل أي حقل آخر غير موجود في الطلب. يمكن استخدام هذه الدالة لضمان عدم تواجد أي حقل غير مرغوب في الطلب.

على سبيل المثال، إذا كان لديك طلب (request) يحتوي على حقول مختلفة وتريد استخدام الحقول الموجودة في الطلب فقط، يمكن استخدام الدالة `intersect()` في الطلب وتمرير الحقول المطلوبة كمصفوفة:

public function store(Request $request)
{
    $data = $request->intersect(['name', 'email']);

    // $data الآن يحتوي على الحقول الموجودة في الطلب فقط وهي "name" و "email"
}

تمامًا مثل الدالتين `except()` و `only()`، يمكن استخدام الدالة `intersect()` في أي عملية (method) في Laravel تستخدم الطلب (request). ومن المهم الإشارة إلى أن هذه الدالة لا تعمل مع طلبات ملفات (multipart/form-data)، حيث يجب استخدام `except()` أو `only()` في هذه الحالة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

بجانب ما اقترحه المدربون، يمكنك فرض قيمة افتراضية للخاصية المعنية مع السماح بعدم ارسالها في طلب التحديث، لنعرف المسترجع getImageAttribute في ملف النموذج المعني كالتالي:

public function getImageAttribute($value){
    return is_null($value)
    ? 'path/to/default_img.png'
    : $value;
}

يتم هنا التحقق من ما ان كان النموذج يمتلك بالفعل قيمة مسندة في خاصية مسار الصورة، وإلا فإنه يعيد مسار الصورة الافتراضية.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 7 ساعة قال Adnane Kadri:

بجانب ما اقترحه المدربون، يمكنك فرض قيمة افتراضية للخاصية المعنية مع السماح بعدم ارسالها في طلب التحديث، لنعرف المسترجع getImageAttribute في ملف النموذج المعني كالتالي:

public function getImageAttribute($value){
    return is_null($value)
    ? 'path/to/default_img.png'
    : $value;
}

يتم هنا التحقق من ما ان كان النموذج يمتلك بالفعل قيمة مسندة في خاصية مسار الصورة، وإلا فإنه يعيد مسار الصورة الافتراضية.

كيف يمكن استدعائها ف المتحكم 

بتاريخ 21 ساعة قال Mustafa Suleiman:

تستطيع استخدام خاصية "fill" في النموذج Laravel، حيث يمكن تحديد الحقول التي يجب تعديلها وترك الحقول الأخرى بدون تعديل.

مثلاً، إذا كان لديك نموذج يحتوي على حقول "title" و "description" و "image" ، وتحتاج إلى تعديل "title" و "description" فقط دون تغيير الصورة، يمكنك القيام بذلك كما يلي:

public function update(Request $request, $id)
{
    $post = Post::findOrFail($id);
    $post->fill($request->only('title', 'description'));
    $post->save();

    return redirect()->back();
}

تم استخدام الدالة "fill" لتحديد الحقول "title" و "description" فقط وترك حقل الصورة دون تغيير، واستخدام الدالة "only" لتحديد الحقول المطلوبة فقط للتحديث.

وبذلك سيتم الاحتفاظ بالصورة القديمة في الحقل "image" دون الحاجة إلى إعادة تحميلها.

$post->fill($request->only('title', 'description'));

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

بتاريخ 22 ساعة قال Mustafa Suleiman:

تستطيع استخدام خاصية "fill" في النموذج Laravel، حيث يمكن تحديد الحقول التي يجب تعديلها وترك الحقول الأخرى بدون تعديل.

مثلاً، إذا كان لديك نموذج يحتوي على حقول "title" و "description" و "image" ، وتحتاج إلى تعديل "title" و "description" فقط دون تغيير الصورة، يمكنك القيام بذلك كما يلي:

public function update(Request $request, $id)
{
    $post = Post::findOrFail($id);
    $post->fill($request->only('title', 'description'));
    $post->save();

    return redirect()->back();
}

تم استخدام الدالة "fill" لتحديد الحقول "title" و "description" فقط وترك حقل الصورة دون تغيير، واستخدام الدالة "only" لتحديد الحقول المطلوبة فقط للتحديث.

وبذلك سيتم الاحتفاظ بالصورة القديمة في الحقل "image" دون الحاجة إلى إعادة تحميلها.

use App\Traits\UPimageTrait;
//////Controller
 public function update(Request $request, $ad_id)
    {
 $path = $this->upimage2($request, 'name');
 $Ads = Advertisement::find($ad_id);
 $Ads->fill($request->only('Faculty_Name'));
 $Ads->Adv_Img_Path = $path;
 $Ads->save();
}
//////

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...