0

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

这是我的控制器

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
4

3 回答 3

0

希望对你有帮助 :

由于您在控制器中使用带有对象的单个项目,因此您应该使用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

于 2018-07-03T07:35:41.530 回答
0

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

$product->pro_name而不是这种用途$product['pro_name']

于 2018-07-03T07:42:24.183 回答
0

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

正如错误所说:

Trying to get property of non-object

尝试这个:

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

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

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

于 2018-07-03T07:48:12.320 回答