How to save entries in many to many polymorphic relationship in Laravel?

耗尽温柔 提交于 2019-12-02 14:12:52

You can use all of the belongsToMany methods for this, for polymorphic many-to-many extends that relation:

// I would call that relation on tag in plural 'entities()' to be more accurate

$tag->entities()->save(new or existing model, array of pivot data, touch parent = true) (used on existing model)
$tag->entities()->saveMany(array of new or existing models, array of arrays with pivot data)
$tag->entities()->attach(existing model / id, array of pivot data, touch parent = true)
$tag->entities()->sync(array of ids, detach = true)
$tag->entities()->updateExistingPivot(pivot id, array of pivot data, touch)

All of those methods work both ways of course.


Examples:

$tag = Tag::first();
$entity = Entity::find(10);

// save() works with both newly created and existing models:
$tag->entities()->save(new Entity(...));
$tag->entities()->save($entity);

// saveMany() like above works with new and/or existing models:
$tag->entities()->saveMany([$entity, new Entity(...)]);

// attach() works with existing model or its id:
$tag->entities()->attach($entity);
$tag->entities()->attach($entity->id);

// sync() works with existing models' ids:
$tag->entities()->sync([1,5,10]); // detaches all previous relations
$tag->entities()->sync([1,5,10], false); // does not detach previous relations, attaches new ones skipping existing ids

Your case:

Route::put('org/{org}', function(Org $org){

  $org->description = Input::get('description');
  $org->website = Input::get('website');
  $org->save();

  $org->tags()->sync(Input::get('tags'));

  // or if you don't want to detach previous tags:
  // $org->tags()->sync(Input::get('tags'), false);


  return Redirect::to('org/'.$org->id)
    ->with('message', 'Seccessfully updated page!');
});
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!