Codeigniter - 尝试获取非对象的 属性

Code Igniter - Trying to get property of a non object

我正在尝试在 codeigniter 中实现购物车功能。在我的控制器中,我有一个 public 函数 add,在我的模型中有一个名为 get 的 public 函数,用于根据所选产品从数据库中获取数据。

这是我的控制器

public function add() {
    $id = $this->input->post('id');
    $product = $this->products_model->get($id);

    echo "<pre>";
    print_r($product);  die();

    $data = array(
      'id' => $id,
      'name' => $product->pro_name,
      'qty' => 1,
      'price' => $product->pro_price
    );
    $this->cart->insert($data);
  }

这是我的模特

public function get($id) {
  $results = $this->db->get_where('products', array('pro_id' => $id));
  return $results->result_array();
}

当我 print_r($product) 我得到一个这样的数组。

Array
(
    [0] => Array
        (
            [pro_id] => 1
            [pro_name] => Beef Carrot & Pea Food
            [pro_price] => 150.00
            [pro_image] => 1.png
        )

)

但是当我尝试插入数据数组时出现此错误。

A PHP Error was encountered

Severity: Notice

Message: Trying to get property of non-object

Filename: controllers/cart.php

Line Number: 11

Backtrace:

File: E:\xampp\htdocs\ci\dogschew\application\controllers\cart.php
Line: 11
Function: _error_handler

File: E:\xampp\htdocs\ci\dogschew\index.php
Line: 315
Function: require_once

希望对您有所帮助:

由于您在控制器中使用带有对象的单个项目,因此您应该使用 row() 而不是 result_array();

你的模型应该是这样的:

public function get($id) 
{
  $results = $this->db->get_where('products', array('pro_id' => $id));
  return $results->row();
}

你的控制器应该是这样的:

在您的控制器中打印 $data 以检查它是否有数据;

public function add() 
{
     $id = $this->input->post('id');
     $product = $this->products_model->get($id);

     $data = array(
       'id' => $id,
       'name' => $product->pro_name,
       'qty' => 1,
       'price' => $product->pro_price
     );
     print_r($data); die();
     $this->cart->insert($data);
}

更多:https://www.codeigniter.com/user_guide/database/results.html

您需要使用数组语法而不是对象语法来访问值

$product->pro_name 而不是使用 $product['pro_name']

您返回的是数组而不是对象。因此,$product 将包含一个数组...

如错误所述:

Trying to get property of non-object

试试这个:

$data = [
    'id' => $id, 
    'name' => $product[0]['pro_name'], 
    'qty' => 1, 
    'price' => $product[0]['pro_price']
];

...或者更好的是,在模型的 get() 方法上使用 row() 方法,如下所示:

public function get($id)
{
    $results = $this->db->get_where('products', [
        'pro_id' => $id
    ]); 

    return $results->row();
}

使用它,您现在可以拥有:

$data = [
    'id' => $id, 
    'name' => $product->pro_name, 
    'qty' => 1, 
    'price' => $product->ipro_price
];

来源: https://www.codeigniter.com/user_guide/database/results.html#result-rows