12

need help regarding array_push inside .each() method on laravel. I cannot get the container array on this code:

$imagesData = array();
collect($data['images'])->each(function($v, $k) use($imagesData){

    $v['created_at'] = date('Y-m-d H:i:s');
    $v['updated_at'] = date('Y-m-d H:i:s');
    $v['image_id'] = $v['image_id'];
    $v['settings'] = json_encode($v['settings']);

    array_push($imagesData, $v);

});

$result = Images::insert($imagesData, true);

Basically, the code above I want to iterate the data inside .each() and then push it to array container and insert it by batch. NOTE: when i use foreach there will be no problem, but I need to use .each() instead of foreach.

Thanks

0

2 Answers 2

26

Because you want to change the original $imageData, you need to refer to this variable instead of just copying the value of it. This is done by using an ampersand &.

collect($data['images'])->each(function($v, $k) use(&$imagesData){
    // ...
});
Sign up to request clarification or add additional context in comments.

Comments

18

Using the Collection::map method is a much more readable way to do the same thing:

$imagesData = collect($data['images'])
    ->map(function($item) {

        $item['created_at'] = date('Y-m-d H:i:s');
        $item['updated_at'] = date('Y-m-d H:i:s');
        $item['image_id'] = $item['image_id'];
        $item['settings'] = json_encode($item['settings']);

        return $item;
    })
    ->all();

$result = Images::insert($imagesData, true);

map iterates over the array the same way as each does. The difference is that each does not return anything (so you need to build the new array yourself) while map automatically builds a new collection of the items you return inside the function. After map, you use all to return the results as a plain array.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.