Code Igniter — Попытка получить свойство не объекта

Я пытаюсь реализовать функциональность корзины в 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

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

0

Другие решения

Вам нужно получить доступ к значениям, используя синтаксис массива, а не синтаксис объекта

$product->pro_name вместо этого использовать $product['pro_name']

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

0