从一个数据中获取循环数据

时间:2015-02-24 04:15:59

标签: php codeigniter

我正在使用codeigniter。

我在模型中有两个功能。

在第一个函数中,我从一个表中获取所有特定的行。这是我想获得所有产品细节的地方。

function getProduct() 
    {
        $shoes = 'SELECT pd.name,
                         pd.id, 
                         pd.price

                  FROM product_detail pd
                  LEFT JOIN product_sub_category psc
                  ON pd.sub_category_id = psc.id
                  WHERE psc.name = "Shoes"';

        $categoried = $this->db->query($shoes);
        return $categoried->result();
    }

在第二个函数中,我根据第一个函数中的一行得到所有特定行。这是我想要获得每个产品的所有图像的地方。

function getImage()
    {
        $shoes = 'SELECT pim.file_name                      
                  FROM product_img pim
                  LEFT JOIN product_detail pd
                  ON pim.product_detail_id = pd.id
                  WHERE pim.product_detail_id = "'.$row->id.'"';

        $categoried = $this->db->query($shoes);
        return $categoried->result();

    }

但它给了我一些错误。

有人可以帮帮我吗?谢谢你的帮助。



[更新]

这是我的控制器

在控制器中,我标识records以获取产品,并recorded来获取图像。

function index() 
    {
        $this->load->model('site_model'); 

        $data = array();
        $query = $this->site_model->getProduct();
        $data['records'] = $query;

        foreach ($query as $row) 
            {
                $id = $row->id; // get ID
                $name = $row->name; // get ID
                $product_image = $this->site_model->getImage($id); // invoke the second method feeding that ID
                $data['recorded'] = $product_image;
            }
        $this->load->view('mothershop', $data);

    } 

这是我的模特

function getProduct() 
    {
        $shoes = 'SELECT pd.name,
                         pd.id, 
                         pd.price

                  FROM product_detail pd
                  LEFT JOIN product_sub_category psc
                  ON pd.sub_category_id = psc.id
                  WHERE psc.name = "Shoes"';

        $categoried = $this->db->query($shoes);
        return $categoried->result();
    }


function getImage($id)
    {
        $shoes = 'SELECT pim.file_name                      
                  FROM product_img pim
                  LEFT JOIN product_detail pd
                  ON pim.product_detail_id = pd.id
                  WHERE pim.product_detail_id = "'.$id.'"';

        $categoried = $this->db->query($shoes);
        return $categoried->result();

    }

这是我对motherhop.php的观点

在本节中,我致电recordsrecorded

foreach ($records as $row) 
    {
        echo "<div>".$row->name."</br>";
            foreach ($recorded as $rowed)
                {
                    echo "<img src='".base_url()."upload/thumbs/".$rowed->file_name."'/>";
                }
        echo "</div>"; 
    } 

然而,我不知道为什么,它只为每种产品获得相同的图像。

但如果我在控制器中打印$product_image,它会为每个产品提供不同的图像。

这里有什么问题?

预先感谢@Ghost

1 个答案:

答案 0 :(得分:2)

由于$row->id完全取决于第一个提取方法,因此目前超出范围。要从第一个方法使用该ID,只需在第二个方法上添加一个参数,并将其用于第二个查询。更像这样:

function getImage($id)

然后你可以在第二种方法上使用它。

由于您没有显示有关如何使用方法的任何代码。考虑这个例子:

第一种方法用法(Controller):

$this->load->model('Super_model');
$products = $this->Super_model->getProduct();
foreach($products as &$row) {
    $id = $row->id; // get ID
    $product_image = $this->Super_model->getImage($id); // invoke the second method feeding that ID
    if(!empty($product_image)) { // if it exists
        $row->file_name = $product_image->file_name; // add another property which is file_name on that first fetched data
    }
}

模型方法:

function getImage($id)
{
    $shoes = "SELECT pim.file_name                      
              FROM product_img pim
              LEFT JOIN product_detail pd
              ON pim.product_detail_id = pd.id
              WHERE pim.product_detail_id = '$id' ";

    $categoried = $this->db->query($shoes);
    return ($categoried->num_rows() > 0) ? $categoried->row() : null;   
}

这是它的基本概念,我们不知道发生了什么,以及如何粘合控制器上的其他所有内容,调整它以适应您的代码库。