Почему он показывает, что невозможно получить доступ к смещению строки типа при ошибке строки?

Этот дамп dd($post['comments']); показывает содержимое ниже:

^ "[{"key": "o0Gdz1EsxOpOLN", "layout": "comment", "attributes": {"title": "a", "comment": "b"}}]"

Затем эти данные преобразуются следующим образом:

  [
                    'name' => "comments",
                    'data' => [
                        'comments' =>
                        collect($post['comments'])->map(function ($comment) {
                            return [
                                'title' => $comment['attributes']['title'],
                                'message' => $comment['attributes']['message'],
                            ];
                        }),
                    ]
                ],

Но показывает ошибку:

Cannot access offset of type string on string

Ошибка кажется здесь:

                            'title' => $comment['attributes']['title'],

Вы знаете, в чем может быть дело?

Похоже, ваши comments в формате json. Возможно, вам придется добавить к нему json_decode, прежде чем пытаться получить к нему доступ как к массиву.

Guido Faecke 05.05.2022 19:21

Или, если comments является столбцом базы данных в таблице posts, вы можете включить comments в массив protected $casts. ссылка

user3532758 05.05.2022 19:50
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте json_decode() для доступа к данным.

[
    'name' => "comments",
    'data' => [
        'comments' =>
            collect(json_decode($post['comments'], true))->map(function ($comment) {
                return [
                    'title' => $comment['attributes']['title'],
                    'message' => $comment['attributes']['message'],
                ];
            }),
    ]
],

Но вы должны заранее проверить, что содержимое $post['comments'] содержит нужную вам структуру данных json.

Спасибо! Что вы имеете в виду под тестом?

Bernard 06.05.2022 12:27

@Bernard, если данные поступают из запроса: либо вы отправляете свои данные с неправильным заголовком (должен быть json-applicatoin), либо вы слепо верите, что с форматом никогда не будет проблем. Вы должны установить некоторые правила проверки в любом случае, чтобы не вызывать ошибок при выполнении.

N69S 06.05.2022 13:54

@Bernard, если ваши данные из базы данных, вы можете настроить автоматическое приведение к полю «комментарий» laravel.com/docs/9.x/eloquent-mutators#array-and-json-castin‌​g

N69S 06.05.2022 13:55

Другие вопросы по теме