同步另一个模型

时间:2017-12-26 14:17:26

标签: laravel-5.5 laravel-eloquent

我有一个location的视图。这个location具有不同的services。它们在模型LocationService中的模型(n-m关系)中都有许多链接。

在此视图中,可以为tags的每个service选择不同的location。我有一个名为location_service_tag的模型,其id为location_service,id为tags

现在,我想使用同步方法存储tags组合的location_service。如何存储这些信息?

以下是一个示例(ID是自由选择的):

我有location 1的视图。 这个位置有2 services,ID为11,22。 它们存储在location_service中,ID为111,122。 location_service 111具有标签id 1111,2222,location_service 122具有标签2222,4444。

现在我想使用sync将这些标签存储到location_service_tag中。这怎么可能?

我认为这可能有点像这样,但事实并非如此。

  foreach($request->servicetags as $servicetag){
    if(count($servicetag)>0){
      //Final statement must be true, because we want to override e.g. if one is deleted or inserted
      $location->locationservice()->tags()->sync($servicetag, true);
    }else{
      //There are no services, submit an empty array
      $location->locationservice()->tags()->sync([], true);
    }
  }

1 个答案:

答案 0 :(得分:0)

最后我做了:

  //Save relational Data of services
  //If there are services, add the, else add empty array
  if(isset($request->locationservices)){
    foreach($request->locationservices as $key => $locationservice){
      if(count($locationservice)>0){
        LocationService::find($key)->tags()->sync($locationservice, true);
      }else{
        LocationService::find($key)->tags()->sync([], true);
      }
    }
  }

密钥将locationservice_id作为密钥,循环的值将选定的tag_ids作为每个locationservice的数组。