Получить все ключи x из массива объектов (php, laravel blade) - PullRequest
0 голосов
/ 27 апреля 2019

Таблица базы данных выглядит так:

enter image description here

В столбце «Дополнительно» в базе данных хранится массив объектов, которые выглядят следующим образом:

[
{"id":92,"product_id":8966,"extra_type":"Extras","extra_name":"Olives"},

{"id":93,"product_id":8966,"extra_type":"Extras","extra_name":"Ketchup"},

{"id":92,"product_id":8966,"extra_type":"Extras","extra_name":"Olives"}
]

Код ниже (от лезвия Laravel) возвращает массив объектов.

@foreach($item->orderedProducts as $op)
<tr>
     <td>
         <span>{{ $op['extras'] }}</span><br>
     </td>
</tr>
@endforeach

$ op возвращает это:

{
  "id": 171,
  "product_id": 8966,
  "order_id": 175,
  "price": 11,
  "count": 1,
  "product_data": "{\"id\":8966,\"name\":\"Camera Br\\u00fbl\\u00e9e\",\"description\":\"Lorem ipsum dolor sit amet consectetur adipiscing elit etiam, conubia tempus sed dapibus augue gravida accumsan. Odio congue in blandit iaculis risus gravida parturient dictum quis rhoncus volutpat ornare tincidunt, dignissim ut pellentesque.\",\"price\":11,\"price_old\":null,\"category_id\":4584,\"created_at\":\"2019-03-17 14:59:56\",\"updated_at\":\"2019-04-17 16:37:03\",\"tax_group_id\":null,\"sort\":1,\"vendor_id\":null,\"option1\":null,\"option2\":null,\"option3\":null,\"option4\":null,\"option5\":null,\"option6\":null,\"images\":[\"http:\\/\\/localhost:8000\\/product_images\\/ElI9GImttc.jpg\"],\"formatted_price\":\"\\u00a311\",\"formatted_old_price\":\"0\",\"tax_value\":0,\"city_id\":null,\"restaurant_id\":null,\"product_images\":[{\"id\":9000,\"image\":\"\\/product_images\\/ElI9GImttc.jpg\",\"product_id\":8966,\"created_at\":\"2019-04-08 15:16:53\",\"updated_at\":\"2019-04-08 15:16:53\"}],\"tax_group\":null,\"category\":{\"id\":4584,\"name\":\"Random Things\",\"_lft\":1,\"_rgt\":2,\"parent_id\":null,\"created_at\":\"2018-11-09 13:15:01\",\"updated_at\":\"2019-04-17 16:47:21\",\"restaurant_id\":null,\"city_id\":null,\"category_image\":null,\"has_children\":0,\"image_url\":\"http:\\/\\/localhost:8000\\/category_images\\/a64be5a696402b0fe3649536ab6a49e4_1555519641.jpg\"},\"added\":true}",
  "extras": "[{\"id\":93,\"product_id\":8966,\"extra_type\":\"Extras\",\"extra_name\":\"Ketchup\",\"extra_price\":\"1.20\",\"extra_added\":true,\"price_sum\":1.2,\"extra_count\":1}]",
  "exclusions": "[{\"id\":117,\"product_id\":8966,\"extra_type\":\"Exclusions\",\"extra_name\":\"Rat poison\",\"extra_price\":null,\"exclusion_added\":true}]",
  "created_at": "2019-04-27 10:35:11",
  "updated_at": "2019-04-27 10:35:11",
  "product": {
    "id": 8966,
    "name": "Camera Brûlée",
    "description": "Lorem ipsum dolor sit amet consectetur adipiscing elit etiam, conubia tempus sed dapibus augue gravida accumsan. Odio congue in blandit iaculis risus gravida parturient dictum quis rhoncus volutpat ornare tincidunt, dignissim ut pellentesque.",
    "price": 11,
    "price_old": null,
    "category_id": 4584,
    "created_at": "2019-03-17 14:59:56",
    "updated_at": "2019-04-17 16:37:03",
    "tax_group_id": null,
    "sort": 1,
    "vendor_id": null,
    "option1": null,
    "option2": null,
    "option3": null,
    "option4": null,
    "option5": null,
    "option6": null,
    "images": [
      "http://localhost:8000/product_images/ElI9GImttc.jpg"
    ],
    "formatted_price": "£11",
    "formatted_old_price": "0",
    "tax_value": 0,
    "city_id": null,
    "restaurant_id": null,
    "product_images": [
      {
        "id": 9000,
        "image": "/product_images/ElI9GImttc.jpg",
        "product_id": 8966,
        "created_at": "2019-04-08 15:16:53",
        "updated_at": "2019-04-08 15:16:53"
      }
    ],
    "tax_group": null,
    "category": {
      "id": 4584,
      "name": "Random Things",
      "_lft": 1,
      "_rgt": 2,
      "parent_id": null,
      "created_at": "2018-11-09 13:15:01",
      "updated_at": "2019-04-17 16:47:21",
      "restaurant_id": null,
      "city_id": null,
      "category_image": null,
      "has_children": 0,
      "image_url": "http://localhost:8000/category_images/a64be5a696402b0fe3649536ab6a49e4_1555519641.jpg"
    }
  }
}

Я пытаюсь получить все значения (например) «extra_name» из «extras:».

Желаемый вывод должен выглядеть примерно так:

Оливки Кетчуп Оливки

Ответы [ 4 ]

1 голос
/ 27 апреля 2019

Я думаю, что это будет тренировка

@foreach($item->orderedProducts as $op)
<?php $array = stripslashes(json_encode($op->extras)) ?>
    <tr>
         <td>
             <span>
             @foreach($array as $value)
                 {{ $value['extra_name'] }}
             @endforeach
             </span><br>
         </td>
    </tr>
 @endforeach
1 голос
/ 27 апреля 2019
@foreach($item->orderedProducts as $op)
<tr>
    <td>
    @if ('Extras' == $op->extra_type)
         <span>{{ $op->extra_name }}</span><br>
    @endif
    </td>
</tr>
@endforeach
0 голосов
/ 28 апреля 2019

Я решил это.Мне нужно было использовать json_decode() при переборе массива объектов json.Затем я извлек необходимые атрибуты.

@foreach($item->orderedProducts as $op)
<tr>
    <td>
        @foreach(json_decode($op->extras, true) as $extra)
             {{ $extra['extra_name'] }}<br>
        @endforeach
    </td>
</tr>
@endforeach
0 голосов
/ 27 апреля 2019

Вы можете получить доступ к значению объектов, используя -> в laravel, попробуйте это

@foreach($item->orderedProducts as $op)
<tr>
 <td>
     <span>{{ $op->extra_name }}</span><br>
 </td>
</tr>
@endforeach
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...