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

السؤال

نشر (معدل)

السلام عليكم 

من أجل تــغيير قييمة العمود "state" في جدول كسر الربط  pivot للعلاقة many to many  بحيث لدينا :

1) User model

    public function servicesProccess(){
        return $this->belongsToMany(Service::class)->withPivot('state', 'id')->wherePivotIn('state' , [0,1,2,3]);        
    }

2) blade.php

     <tbody>
                @foreach ($items as $item)
                @foreach ($item->servicesProccess as $req )
                    
               
                    
               
                    <tr>
                        <td> {{ $req->title }}</td>
                        <td>{{ $item->name }}</td>
                       {{-- {{ dd($item) }} --}}
                       
                        <td>
                            <form action="{{ route('step.update' , $item) }}" method="post" style="display: inline-block" class="form-inline" >
                                @method('PATCH')
                                @csrf
                                <input hidden  type="number" name="id" value="{{ $req->id }}">
                             <select name="step" id="">
                                <option value="1" {{ $req->pivot->state == '1' ? "selected disabled" : '' }} >مرحلة 1</option>
                                <option value="2"{{ $req->pivot->state == '2' ? "selected disabled" : ''}}  >مرحلة 2 </option>
                                <option value="3"{{ $req->pivot->state == '3' ? "selected disabled" : ''}}  >معاينة 3</option>
                                <option value="4" {{ $req->pivot->state == '4' ? "selected disabled" : ''}}>4مرحلة </option>
                            </select>

                            <button style="max-height: 34px ;" class=" btn btn-primary"  type="submit" > تعديل <i class="fas fa-pen-fancy"></i></button>
                          
                         </form>
                         
                          <form action="" method="post" style="display: inline-block" class="form-inline" >
                               @method('delete')
                               @csrf
                               <button type="submit" onclick="return confirm('هل أنت متأكد ؟')" class="btn btn-google">حذف <i class="fas fa-trash" ></i></button>
                          </form>                    
                          
                      
                           
                         

                        </td>
                        
                    </tr>
                    @endforeach
                    @endforeach

3) المتحكم 

    public function update(Request $request , USER $user)
    {
      
        $user->servicesProccess()->updateExistingPivot($request->id , ['state' => $request->step]);
        
       
        

        
      
    }

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

 

Untitled.png.365cf996604ff5e90ab4732e68f0b3d4.png

لاحظ ما أشرت اليه بالمربع الأحمر  كله يتشارك في نفس المعرف id فعليه يتم تغيير كل قيم state الموافقة وهذا مالا اريده هل من طريقة أخرى أستطيع بها ان اغيير state بناءا على معرف جدول كسر الربط id :

Untitled.png.05b3aaf34ab70a27b281749638cec94b.png

علما أنني أضفته إلى pivot كالتالي :

    public function servicesProccess(){
        return $this->belongsToMany(Service::class)->withPivot('state', 'id')->wherePivotIn('state' , [0,1,2,3]);
                                                                        ^^^^
    }
 <input hidden  type="number" name="id" value="{{ $req->pivot->id }}">

  وشكرا

 

 

تم التعديل في بواسطة Brahim Semmani
زيادة معطيات

Recommended Posts

  • 1
نشر

يمكن الاستفادة من التابع wherePivot عند تنفيذ التعديل لتحديد معرّف سجل جدول الربط المراد تحديثه فقط كالتالي: 

public function update(Request $request, USER $user)
{
    $user->servicesProccess()
        ->wherePivot('id', $request->id)
        ->updateExistingPivot($request->id, ['state' => $request->step]);
}

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

  • 0
نشر
بتاريخ 13 ساعات قال Hassan Hedr:

يمكن الاستفادة من التابع wherePivot عند تنفيذ التعديل لتحديد معرّف سجل جدول الربط المراد تحديثه فقط كالتالي: 


public function update(Request $request, USER $user)
{
    $user->servicesProccess()
        ->wherePivot('id', $request->id)
        ->updateExistingPivot($request->id, ['state' => $request->step]);
}

 

شكرا لك أخي @Hassan Hedr تمت بنجاح لكن بالنسبة للطريقة الأخر التي أخبرت عنها ممكن  شرح موجز عنها ؟

 

بتاريخ 14 ساعات قال Hassan Hedr:

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

 

  • 0
نشر
بتاريخ منذ ساعة مضت قال Brahim Semmani:

بالنسبة للطريقة الأخر التي أخبرت عنها ممكن  شرح موجز عنها ؟

يمكن إنشاء نموذج ServiceProccess يمتد من الصنف Pivot كالتالي:

<?php
 
namespace App\Models;
 
use Illuminate\Database\Eloquent\Relations\Pivot;
 
class ServiceProccess extends Pivot
{
    //
}

وضمن النموذج تغير العلاقة لتصبح كالتالي:

public function servicesProccess(){
  return $this->belongsToMany(Service::class)->using(ServiceProccess::class);
}

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...