当我想在视图中获取循环数据时,我收到错误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 ;
}
}
仍未显示试图获取非对象的属性。
答案 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) . "'";
说实话,我不确定您对该查询的期望是什么,但请记住,如果给定订单有多个产品,您最终会返回多行。
只是一些提示..希望这对你有用。