如何编码数据数组并保存到数据透视表中 [英] How to encode an array of data and save to a pivot table laravel

查看:188
本文介绍了如何编码数据数组并保存到数据透视表中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

All I want here is to be able to save all the ID's of services into the pivot table associated with the given keywords/tags but at the moment all it does is that it takes the last ID of the created object and saves into the pivot table with different keywords. let's say for example I enter [id1 => service1, id2 => service2] and [id1 = > keyword1, id2 => keyword2, id3 => keyword3] instead of it saving only id2 of service2 and all the keywords I want it to save all the Ids of all of the services and the keywords. I hope it makes sense

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']]]);
  }

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

This is something I would expect but it is tricky because a single or 2 services for example can have multiple keywords. NOTE: I had manually changed these values in the database

这些是dd($ params)的结果

These are the results from a dd($params)

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

Based on the dd($params).attached is the result,only

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

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

was saved in the pivot table and got assigned all the keywords

推荐答案

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

Please correct me if this is a good approach, I managed to solve this by having an inner loop.

    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']]]);
    }
}

这篇关于如何编码数据数组并保存到数据透视表中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆