Недопустимое смещение строки 'order_status_id' в opencart

Я получаю сообщение об ошибке Illegal string offset 'order_status_id', когда хочу просмотреть данные цикла

Вот код:

controller.php

if (isset($_POST["email"])) {
    $email = $_POST["email"];
}

$this->load->model('order/myorder');
$data['data1'] = $this->model_order_myorder->getOrder($email) ;

view.php

foreach ($data1 as $row) {
    echo echo $row->order_id;
}

model.php

class ModelOrderMyorder extends Model {

    public function getOrder($email) {

        $sql = "SELECT * FROM ".DB_PREFIX."order, ".DB_PREFIX."order_product WHERE ".DB_PREFIX."order.email = '$email'";
        $query = $this->db->query($sql);

        return $query ;
    }

}

Все еще не показывая его Попытка получить свойство не-объекта в поле зрения.


person rockie    schedule 11.04.2015    source источник
comment
Ошибка предполагает, что поле order_status_id не существует в $result. Ваш цикл странный. Поскольку вы используете if (isset($result... вне цикла, $result будет содержать последний заказ в наборе. Я бы предложил сделать var_dump($result); непосредственно перед этой строкой, чтобы увидеть, содержит ли она ожидаемые данные.   -  person rjdown    schedule 11.04.2015
comment
он показывает null, если мы сохраняем var_dump($result); Вы знаете, как передать данные запроса для просмотра в цикле?   -  person rockie    schedule 11.04.2015
comment
Вместо этого попробуйте var_dump($data). Если это тоже NULL, ваш запрос не дает никаких результатов. Обратите внимание, что вы должны выполнять запрос в своей модели, а не в контроллере! Чтобы передать данные в представление, вам нужно использовать (в вашем контроллере) $this->data['YOUR_VARIABLE'] = 'whatever';. Тогда, на ваш взгляд, вы можете использовать $YOUR_VARIABLE.   -  person rjdown    schedule 11.04.2015
comment
одна вещь, которую я написал в контроллере для одной строки, работает со всеми деталями, когда я получаю вторые строки, которые соответствуют ее не получению   -  person rockie    schedule 11.04.2015
comment
ок напишу модель проверю   -  person rockie    schedule 11.04.2015
comment
rjdown, я написал модель и код обновления, вижу ошибку   -  person rockie    schedule 11.04.2015
comment
@rjdown cna вы покажете мне пример для этого запроса `$sql = SELECT * FROM .DB_PREFIX.order,.DB_PREFIX.order_product WHERE .DB_PREFIX.order.email='$email'; $query = $this-›db-›query($sql); ' от модели к контроллеру и перейти к просмотру   -  person rockie    schedule 11.04.2015


Ответы (1)


Во-первых, если вы хотите перебрать все продукты заказа для данного электронного письма (что, я думаю, вы хотите), вы должны изменить метод getOrder(), чтобы он возвращал:

 return $query->rows;

Затем в контроллере нужно изменить:

$data['data1'] = $this->model_order_myorder->getOrder($email) ;

to

$this->data['data1'] = $this->model_order_myorder->getOrder($email);

Наконец, с вашей точки зрения, вы будете обращаться к массиву, а не к объекту, поэтому вам следует убрать лишние echo (при условии, что это опечатка) и изменить:

echo   echo $row->order_id;

и получить индекс как:

echo $row['order_id']

Кроме того, в дополнение к вышесказанному, я предлагаю вам использовать некоторые методы и соглашения по коду, которые можно найти в Opencart:

  • При доступе к глобальному $_POST вы можете использовать продезинфицированную версию $this->request->post

  • В вашем запросе не выполняется отметка таблицы order, что может привести к ошибкам, если вы не установили префикс. И вы не убегаете от $email, что является хорошей идеей по ряду причин. Кроме того, все упрощается, если вы даете своим таблицам псевдоним. Наконец, объединение таблиц... поэтому я мог бы переписать этот запрос следующим образом:

    $sql = "SELECT * FROM `" . DB_PREFIX . "order` o LEFT JOIN " . DB_PREFIX . "order_product op USING (order_id) WHERE o.email = '" . $this->db->escape($email) . "'";

Честно говоря, я не уверен, какие результаты вы ожидаете от этого запроса, но имейте в виду, что если для данного заказа есть несколько продуктов, вы получите несколько возвращенных строк.

Всего несколько советов.. надеюсь, это будет полезно для вас.

person billynoah    schedule 12.04.2015