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

Illegal string offset 'order_status_id' in 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 ;
    }

}

仍然没有显示正在尝试让 属性 的非对象可见。

首先,如果您想遍历给定电子邮件的所有订单产品(我想这就是您想要的),您应该将 getOrder() 方法更改为 return:

 return $query->rows;

然后在controller中你需要改变:

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

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

最后,在您看来,您将访问一个 array 而不是 object 所以您应该失去额外的 echo(假设这是一个错字)并更改:

echo   echo $row->order_id;

并获取索引为:

echo $row['order_id']

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

  • 访问 $_POST 全局时,您可以使用经过消毒的 版本 $this->request->post

  • 您的查询未能反引号 order table 这可能会导致 在你没有设置前缀的错误中。而你并没有逃避 $email 出于多种原因,这是一个好主意。同时,它使 如果您给 table 起个别名,事情就容易多了。最后,加入 tables...所以我可能会考虑像这样重写该查询:

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

老实说,我不确定您希望从该查询中得到什么结果,但请记住,如果给定订单有多种产品,您最终会得到多行 returned .

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