CodeIgniter:如何根据第一个查询结果正确运行两个查询?

时间:2013-12-05 15:52:06

标签: php mysql codeigniter

我正在查询我的数据库中的结果(都显示正确)然后在运行foreach语句时我试图在另一个表中查找匹配的ID以收集覆盖价格,这将取代'storeprice'在第一个结果中列出。

这是我的模特:

public function fetch_products($limit, $start, $manuid) {
    $this->db->order_by('productname', 'ASC');
    $this->db->limit($limit, $start);

    $query = $this->db->get_where('products', array('manuid' => $manuid, 'active' => 1));
    if($query->num_rows() > 0){
        foreach($query->result() as $row){
            $data[] = $row;
            $pid = $row->id;
            // Check for Price Override
            $squery = $this->db->get_where('price_override', array('id' => $pid));
            if($squery->num_rows() > 0){
                $result = $squery->row();
                $override = $result->storeprice;
                $data['override'] = $override;
            } else {
                $override = 0;
                $data['override'] = $override;
            }
        }
        return $data;
    }
    return false;
}    

$ data ['override']导致我出错。确切地说是以下错误:

Message: Undefined property: stdClass::$override

在控制器中我使用以下内容:

$data['results'] = $this->store_products_model->fetch_products($config["per_page"], $page, $manuid);

最后在视图中我调用表中的结果来显示。除了覆盖之外,所有都将显示:

foreach ($results as $product){
               echo '<tr>';
               echo '<td>' . $product->productname . '</td>';
               if($product->override != 0){
                echo '<td>$' . $product->override . '</td>';   
               } else {
                echo '<td>$' . $product->storeprice . '</td>';
               }
               echo '<td>$' . $product->saleprice . '</td>';
               echo '<td>' . $product->storepoints . '</td>';
               echo '<td><a href="store_modify_product/' . $product->id . '">Edit</a>';
               echo '</tr>';
            }

任何人都可以在这里看到我可能做错了什么来给我以下错误?

Message: Undefined property: stdClass::$override

1 个答案:

答案 0 :(得分:1)

该行是一个对象,而不是一个数组。尝试:

$data->override = $override

编辑:

实际上,$ data是一个数组,但你在其中插入了一个对象,所以它就是

$last_index = sizeof($data) - 1;
$data[$last_index]->override = $override;