Как закодировать массив данных и сохранить в сводную таблицу laravel

Все, что я хочу здесь, это иметь возможность сохранять все идентификаторы сервисов в сводную таблицу, связанную с заданными ключевыми словами/тегами, но на данный момент все, что он делает, это то, что он берет последний идентификатор созданного объекта и сохраняет в сводную таблицу с разными ключевыми словами. скажем, например, я ввожу [id1 => service1, id2 => service2] и [id1 => ключевое слово1, id2 => ключевое слово 2, id3 => ключевое слово 3] вместо того, чтобы сохранять только id2 службы 2 и все ключевые слова, которые я хочу сохраните все идентификаторы всех услуг и ключевых слов. Я надеюсь, что это имеет смысл

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"
]

был сохранен в сводной таблице и ему были присвоены все ключевые слова

введите здесь описание изображения


person Thomas Chirwa    schedule 02.09.2018    source источник
comment
Каков будет ожидаемый результат (в сводной таблице) данных примера в вашем вопросе?   -  person Jonas Staudenmeir    schedule 03.09.2018
comment
@JonasStaudenmeir, пожалуйста, проверьте изображение, которое я только что прикрепил.   -  person Thomas Chirwa    schedule 03.09.2018
comment
Каков результат dd($params); в этом случае?   -  person Jonas Staudenmeir    schedule 03.09.2018
comment
@JonasStaudenmeir, пожалуйста, проверьте недавно прикрепленное изображение.   -  person Thomas Chirwa    schedule 03.09.2018
comment
Таким образом, маркетинг в социальных сетях не будет привязан к какой-либо услуге, потому что в $params['service'] нет третьей записи?   -  person Jonas Staudenmeir    schedule 03.09.2018
comment
Это было бы так, но поскольку существует несколько сервисов service =› array:2[ 0 =›Web development ] не будет сохранено в сводной таблице, только service =›array:2[ 1 =›Mobile development ] будет иметь все 3 ключевые слова   -  person Thomas Chirwa    schedule 03.09.2018
comment
Значит скриншот с ожидаемым результатом неполный?   -  person Jonas Staudenmeir    schedule 03.09.2018
comment
Да, смотрите прикрепленное изображение   -  person Thomas Chirwa    schedule 03.09.2018


Ответы (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']]]);
    }
}

введите здесь описание изображения

person Thomas Chirwa    schedule 03.09.2018