cakephp 无法设置空属性

aiqt4smr  于 2023-06-23  发布在  PHP
关注(0)|答案(1)|浏览(103)

我遇到此错误{“message”:“无法设置空属性”,“url”:“/function-list/get-products-function”,“code”:500,“文件”:“/var/www/html/vendor/cakephp/cakephp/src/Datasource/EntityTrait.php”,“line”:238 }
我相信我做了所有初始化的变量和数组之前,分配值我得到这个错误时,我把代码在获取$产品,并将其分配给变量,然后访问它在分配数组的$row_data与一个索引connectedproducts。

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;
    }
ibrsph3r

ibrsph3r1#

您遇到的错误消息“无法设置空属性”通常是在您尝试在未初始化或为空的对象或数组上设置属性或值时发生的。根据您提供的代码,错误可能发生在以下行:
$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数组应该被正确填充。

相关问题