In Laravel, how to attach many to many with an extra field from the pivot table

44 Views Asked by At

I have looked at several posts on the subject but I am confused.

I have 2 tables (activities & criteria) and a pivot table with an extra field (sortorder). My models are like this:

 // return all the activities associated with the criteria
 public function allActivities()
 {
      return $this->belongsToMany(Activity::class,'activity_criteria')->withPivot('sortorder');
 }

 // return all the criteria associated with this activity
 public function allCriteria()
 {
      return $this->belongsToMany(Criteria::class,'sc_activity_criteria')->withPivot('sortorder')->orderByPivot('sortorder');
 }

When I edit & save a criteria, I lose all the values of sortorder to NULL in the pivot table. How can I avoid that?

 // update record in db 
 $criteria->save();

 // detach old activities & attach the activities to populate the table activity_criteria
 $criteria->allActivities()->where('id',$criteria->id)->detach();
 $criteria->allActivities()->attach(request('activities'));

The problem is that when I edit a criteria, I do not know all the values of sortorder in all associated activities. Should I get that field in the edit form as well as an array ($sortorders)?

And then do something like this:

 $criteria->allActivities()->attach(request('activities'),['sortorder' => request('sortorders')]);
0

There are 0 best solutions below