Laravel сумма значений сериализованных данных - PullRequest
0 голосов
/ 04 марта 2020

Я сериализовал данные, хранящиеся в базе данных, и мне нужно вычислить некоторые из их значений, таких как weight, total quantity или total price et c. ( но сейчас мне нужно только получить общий вес )

Образцы

Вот как выглядят данные в базе данных:

"a:5:{s:4:\"name\";s:11:\"Product One\";s:5:\"price\";s:5:\"15000\";s:8:\"quantity\";i:3;s:10:\"attributes\";a:1:{s:4:\"attr\";a:2:{s:4:\"name\";s:6:\"weight\";s:5:\"value\";s:2:\"35\";}}s:10:\"conditions\";a:2:{i:0;a:2:{s:4:\"name\";s:3:\"red\";s:5:\"value\";i:0;}i:1;a:2:{s:4:\"name\";s:1:\"L\";s:5:\"value\";i:0;}}}"

"a:5:{s:4:\"name\";s:11:\"Product Two\";s:5:\"price\";s:6:\"436436\";s:8:\"quantity\";i:1;s:10:\"attributes\";a:1:{s:4:\"attr\";a:2:{s:4:\"name\";s:6:\"weight\";s:5:\"value\";s:1:\"1\";}}s:10:\"conditions\";a:0:{}}"

Обновление

Чтобы было более понятно, как выглядят приведенные выше примеры кодов на вкладке сети.

three

Исходя из этого, я должен получить общий вес 36 кг

Код

Вот как я в настоящее время возвращаю данные в мой компонент из контроллера

public function index(Request $request)
{
    $user = $request->user();
    $items2 = CartStorage::where('user_id', $user->id)->get();

    $items = [];
    foreach($items2 as $item){
        $items[] = unserialize($item['cart_data']);
    }

    return response()->json([
        'data' => $items,
        'success' => 'Your cart items retrieved successfully.'
    ], 200);
}

Вот как это выглядит:

one

На всякий случай вам нужно увидеть структуру базы данных

two

Вопрос

Как мне определить вес товаров в моей корзине?

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Решено

Окончательный код

    $items2 = CartStorage::where('user_id', $user->id)->get();

    $totalWeight = 0;
    foreach ($items2 as $subArray) {
        if(isset($subArray['cart_data'])){
            $ans = json_decode($subArray['cart_data'],true);
            if(is_array($ans)){
                foreach($ans['attributes'] as $attribute) {
                    $totalWeight += $attribute['value']; 
                }
            }
     }
}
0 голосов
/ 04 марта 2020

Вы можете использовать Laravel функцию агрегации коллекции.

CartStorage::where('user_id', $user->id)->get()-sum('qty');

https://laravel.com/docs/7.x/collections#method -сумма

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...