Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何对数据数组进行编码并保存到透视表laravel_Php_Laravel_Eloquent_Pivot Table - Fatal编程技术网

Php 如何对数据数组进行编码并保存到透视表laravel

Php 如何对数据数组进行编码并保存到透视表laravel,php,laravel,eloquent,pivot-table,Php,Laravel,Eloquent,Pivot Table,这里我想要的是能够将所有服务的ID保存到与给定关键字/标记关联的透视表中,但目前它所做的只是获取所创建对象的最后一个ID,并使用不同的关键字保存到透视表中。例如,我输入[id1=>service1,id2=>service2]和[id1=>keyword1,id2=>keyword2,id3=>keyword3],而不是只保存service2的id2和所有关键字,我希望它保存所有服务和关键字的所有ID。我希望这是有道理的 foreach($params['service'] as $key =&

这里我想要的是能够将所有服务的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)。附件仅为结果

"service" => array:2[
1 => "Mobile development"
]
保存在透视表中,并为其分配了所有关键字


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

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

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