Поле слияния Laravel в подмассивах в запросе

Я получаю эти данные из запроса:

array:2 [
  0 => array:3 [
    "from" => 0
    "to" => 5
    "earned" => 0
  ]
  1 => array:3 [
    "from" => 5
    "to" => 10
    "earned" => 1
  ]
]

Я хочу добавить brand_id в каждый подмассив.

Я знаю, что могу добавить поле в запрос, например:

$request->merge([
    'brand_id' => $brand_id,
]);

Что приводит к:

array:3 [
  0 => array:3 [
    "from" => 0
    "to" => 5
    "earned" => 0
  ]
  1 => array:3 [
    "from" => 5
    "to" => 10
    "earned" => 1
  ]
  "brand_id" => "1"
]

Где я хочу, чтобы результат был:

array:2 [
  0 => array:4 [
    "from" => 0
    "to" => 5
    "earned" => 0
    "brand_id" => "1"
  ]
  1 => array:4 [
    "from" => 5
    "to" => 10
    "earned" => 1
    "brand_id" => "1"
  ]
]

Было бы неплохо, если бы можно было сделать так:

$request->merge([
    '*.brand_id' => $brand_id,
]);

Примечание. Я проверил это Как заменить значение вложенного массива внутри запроса Laravel с помощью слияния? но если я собираюсь использовать foreach, мне не нужно будет выполнять слияние запросов. Кроме того, может быть, есть что-то новое в Laravel 8.


person Adem Tepe    schedule 12.05.2021    source источник
comment
@JustCarty Ну, не совсем так, я уже объяснил в примечании под вопросом.   -  person Adem Tepe    schedule 12.05.2021


Ответы (1)


Попробуйте код ниже. Вы можете перебирать каждый элемент и объединять. (при условии, что вы используете объект запроса)

$mergedArray = array_map(function($element) use ($brand_id){ 
    return array_merge($element, ['brand_id' => $brand_id]); 
}, $request->all())
person Kenath    schedule 12.05.2021
comment
Это отличное решение, я применяю его, но получаю сообщение об ошибке: Undefined variable: brand_id Затем я добавляю $brand_id в определение анонимной функции, на этот раз получил эту ошибку: Too few arguments to function App\\Http\\Controllers\\ShiftBreakController::App\\Http\\Controllers\\{closure}(), 1 passed and exactly 2 expected. Таким образом ищем использование array_map. - person Adem Tepe; 12.05.2021
comment
Нашел правильное использование здесь stackoverflow.com/questions/27599767/ и получил $brand_id переменную, например function($element) use ($brand_id) Если лучшего предложения нет, я отмечу ваш ответ принятым @Kenath - person Adem Tepe; 12.05.2021
comment
Извините, я забыл добавить использование. Сейчас поправлю. - person Kenath; 14.05.2021