opencart中的非法字符串偏移'order_status_id'

时间:2015-04-11 12:47:10

标签: opencart opencart2.x

当我想在视图中获取循环数据时,我收到错误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 ;
    }

}

仍未显示试图获取非对象的属性。

1 个答案:

答案 0 :(得分:0)

首先,如果你想迭代给定电子邮件的所有订单产品(我认为你想要的),你应该改变getOrder()方法返回:

 return $query->rows;

然后在控制器中你需要改变:

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

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

最后,在您看来,您将访问数组而不是对象,因此您应该丢失额外的echo(假设这是一个错字)并改变:

echo   echo $row->order_id;

并将索引作为:

echo $row['order_id']

此外,除了上述内容之外,我建议您使用Opencart中的一些方法和代码约定:

  • 访问$_POST全局时,您可以使用已清理的 版本$this->request->post

  • 您的查询无法反击可能导致的订单表 在你的错误中没有设置前缀。而且你没有逃脱 $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) . "'";

说实话,我不确定您对该查询的期望是什么,但请记住,如果给定订单有多个产品,您最终会返回多行。

只是一些提示..希望这对你有用。