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
我正在尝试在 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