【问题标题】:How to encode an array of data and save to a pivot table laravel如何编码数据数组并保存到数据透视表 laravel
【发布时间】:2018-09-02 19:49:33
【问题描述】:

我在这里想要的只是能够将所有服务 ID 保存到与给定关键字/标签关联的数据透视表中,但目前它所做的只是获取创建对象的最后一个 ID 并保存到具有不同关键字的数据透视表。假设我输入 [id1 => service1, id2 => service2] 和 [id1 = > keyword1, id2 => keyword2, id3 => keyword3] 而不是只保存 service2 的 id2 和我想要的所有关键字保存所有服务的所有 ID 和关键字。我希望它有意义

foreach($params['service'] as $key => $value){
      $service = Service::firstOrNew(['service' => $value, 'price' => $params['price'][$key], 'business_id' => $params['business_id']]);
      $service->service = $value;
      $service->price = $params['price'][$key]; 
      $service->business_id = $params['business_id'];
      $service->save();
    }

    foreach($params['keywords'] as $keyword){
      $cleaned_keyword = self::cleanKeywords($keyword); 
      $newKeyword = Keyword::firstOrNew(['keyword' => $cleaned_keyword]);
      $newKeyword->keyword = $cleaned_keyword;
      $newKeyword->save();
      $service->keywords()->syncWithoutDetaching([$newKeyword->id => ['business_id' => $params['business_id']]]);
  }

这是我所期望的,但它很棘手,因为例如一个或两个服务可以有多个关键字。注意:我在数据库中手动更改了这些值

这些是 dd($params) 的结果

基于dd($params).attached是结果,只有

"service" => array:2[
1 => "Mobile development"
]

保存在数据透视表中并分配了所有关键字

【问题讨论】:

  • 您问题中示例数据的预期结果(在数据透视表中)是什么?
  • @JonasStaudenmeir,请查看我刚刚附上的图片。
  • 这种情况下dd($params);的结果是什么?
  • @JonasStaudenmeir,请查看新附上的图片。
  • 所以“社交媒体营销”不会附加到任何服务,因为$params['service'] 中没有第三个条目?

标签: php laravel eloquent pivot-table


【解决方案1】:

如果这是一个好方法,请纠正我,我设法通过内部循环解决了这个问题。

    foreach($params['service'] as $key => $value) {
    $service = Service::firstOrNew(['service' => $value, 'price' => $params['price'][$key], 'business_id' => $params['business_id']]);
    $service->service = $value;
    $service->price = $params['price'][$key];
    $service->business_id = $params['business_id'];
    $service->save();
    foreach($params['keywords'] as $keyword) {
        $cleaned_keyword = self::cleanKeywords($keyword);
        $newKeyword = Keyword::firstOrNew(['keyword' => $cleaned_keyword]);
        $newKeyword->keyword = $cleaned_keyword;
        $newKeyword->save();
        $service->keywords()->syncWithoutDetaching([$newKeyword->id => ['business_id' => $params['business_id']]]);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-29
    • 2019-04-07
    • 2018-04-10
    • 2018-03-20
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多