Невозможно задать пустое свойство

Я сталкиваюсь с этой ошибкой { "сообщение": "Невозможно установить пустое свойство", "url": "/function-list/get-products-function", "code": 500, "file": "/var/www/ html/vendor/cakephp/cakephp/src/Datasource/EntityTrait.php", "строка": 238 }

Я считаю, что я сделал всю инициализацию переменных и массивов перед присвоением значений я получаю эту ошибку, когда я помещаю код в получение продукта $ и назначаю его переменным, а затем получаю доступ к нему для назначения в массиве $ row_data с индексом подключенных продуктов.

public function getProductsFunction()
{
    $this->autoRender = false;

    $product = $_POST['product'];

    $functionsTable = TableRegistry::get('functions');
    $functionsCapabilitiesTable = TableRegistry::get('function_capabilities');
    $functionsRelationsTable = TableRegistry::get('function_relations');

    $functions = $functionsTable->findByProductAndDeleted($product, 0)->toArray();

    $result = [];
    foreach ($functions as $function) {
        $products = $functionsRelationsTable->find()
        ->select(['product_name' => 'Products.name'])
        ->innerJoinWith('Products')
        ->where(['function_id' => $function['id'], 'function_id_2' => 0]);

        $results = $products->toArray();

        $productNames = [];
        foreach ($results as $result) {
            $productNames[] = $result['product_name']; // Extract product names
        }

        debug($productNames);
        exit;

        $no_of_capabilities = $functionsCapabilitiesTable->findByFunctionId($function['id'])->count();
        $row_data = [];
        $row_data['function_name'] = $function['name'];
        $row_data['no_of_capabilities'] = '<a target = "_blank" href = "/function-list/capabilities/' . $function['id'] . '">' . $no_of_capabilities . '</a>';
        $row_data['linked_functions'] = 0;
        $row_data['connected_products'] = implode(', ', $productNames); // Join product names into a string
        $row_data['action'] = '<button class = "btn btn-primary btn-edit" data-id = "' . $function['id'] . '">Edit</button>
                       <button class = "btn btn-danger btn-delete" data-id = "' . $function['id'] . '">Delete</button>';

        $result[] = $row_data;
    }

Какая строка 238, пожалуйста?

Rob Eyre 02.06.2023 14:37

Не обращайте внимания на эту строку. У меня возникла эта ошибка, потому что я поместил ее в свой FunctionListController, в частности, это ') ->where(['function_id' => $function['id'], 'function_id_2' => 0]); $results = $products->toArray(); $productNames = []; foreach ($results as $result) { $productNames[] = $result['product_name']; // Извлечь названия продуктов } Если я уберу это, код будет работать нормально

Rey Chabby Estrera 02.06.2023 15:30

Не уверен, что это проблема, с которой вы столкнулись, но этот foreach ($results as $result) перезапишет $result[] = $row_data, который вы делаете в конце цикла. Может быть, просто переименовать во что-то вроде foreach ($results as $product_result)?

Eric Woods 02.06.2023 17:07
Стоит ли изучать 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 и хотите разрабатывать...
2
3
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Сообщение об ошибке, с которым вы сталкиваетесь, «Невозможно установить пустое свойство», обычно возникает, когда вы пытаетесь установить свойство или значение для объекта или массива, который не инициализирован или не пуст. Судя по предоставленному вами коду, ошибка, скорее всего, возникает в следующей строке:

$row_data['connected_products'] = implode(', ', $productNames);

Ошибка предполагает, что массив $productNames пуст или не инициализирован. Глядя на ваш код, я вижу, что вы пытаетесь заполнить массив $productNames во внутреннем цикле, где вы перебираете массив $results. Однако похоже, что вы по ошибке повторно использовали имя переменной $result как для внешнего, так и для внутреннего цикла. Это может привести к неожиданному поведению и перезаписать ожидаемое значение $results.

Чтобы решить эту проблему, вы должны использовать другое имя переменной для внутреннего цикла. Вот обновленная версия вашего кода:

$result = [];
foreach ($functions as $function) {
    $products = $functionsRelationsTable->find()
        ->select(['product_name' => 'Products.name'])
        ->innerJoinWith('Products')
        ->where(['function_id' => $function['id'], 'function_id_2' => 0]);

    $productResults = $products->toArray();

    $productNames = [];
    foreach ($productResults as $productResult) {
        $productNames[] = $productResult['product_name']; // Extract product names
    }

    // ... Rest of the code ...

    $row_data['connected_products'] = implode(', ', $productNames); // Join product names into a string

    // ... Rest of the code ...
}

Используя другое имя переменной $productResults во внутреннем цикле, вы избежите перезаписи переменной $results внешнего цикла, а массив $productNames должен быть заполнен правильно.

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