Я пытаюсь реализовать функциональность корзины в 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
Надеюсь, что это поможет вам :
Так как вы используете один элемент с объектом в вашем контроллере, так что вы должны использовать 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']
];
…или еще лучше, используйте 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