我正在使用基于mcv设计模式的OpenCart商店。我需要一个模型函数返回一个数组,但我需要在该数组内调用另一个返回数组的函数。下面这个函数打破了这里:PHP - 将数组返回给另一个数组的组合函数
'gallery_images' => $this->getGalleryImages($data['product_id'])
public function getImportProductInfo() {
$query = $this->db->query("SELECT `product_id` FROM " . DB_PREFIX . "product WHERE `status` = '0' AND `affiliate_id` = '" . $this->affiliate->getID() . "'");
$pids = array();
foreach($query->rows as $result) {
$pids[] = $result['product_id'];
}
// product & product description
$query_product = $this->db->query("SELECT p.model,
p.product_id,
p.quantity,
p.image,
p.price,
p.weight,
p.length,
p.width,
p.height,
pd.name AS 'product_name',
pd.description AS 'product_description',
cd.name AS `category_name`,
m.name AS 'manufacturer_name'
FROM " . DB_PREFIX . "product p
LEFT JOIN " . DB_PREFIX . "product_description pd ON p.product_id = pd.product_id
LEFT JOIN " . DB_PREFIX . "product_to_category ptc ON p.product_id = ptc.product_id
LEFT JOIN " . DB_PREFIX . "category_description cd ON ptc.category_id = cd.category_id
LEFT JOIN " . DB_PREFIX . "manufacturer m ON p.manufacturer_id = m.manufacturer_id
WHERE p.product_id IN (" . $this->db->escape(implode(',',$pids)) . ")");
foreach($query_product->rows as $data) {
$product_data[] = array(
'product_id' => $data['product_id'],
'model' => $data['model'],
'quantity' => $data['quantity'],
'featured_image' => $data['image'],
'price' => $data['price'],
'weight' => $data['weight'],
'length' => $data['length'],
'width' => $data['width'],
'height' => $data['height'],
'product_name' => $data['product_name'],
'description' => $data['product_description'],
'category_name' => $data['category_name'],
'manufacturer_name' => $data['manufacturer_name'],
'gallery_images' => array($this->getGalleryImages($data['product_id']))
);
}
return $product_data;
}
这里是getGalleryImages()函数。注意这里我也试过return implode(', ',$images);
,所以我没有建立数组,但它仍然打破。
public function getProductGalleryImages($product_id) {
$query = $this->db->query("SELECT `image` FROM " . DB_PREFIX . "product_image WHERE `product_id` = '" . (int)$product_id . "'");
$images = array();
foreach($query->rows as $result) {
$images[] = $result['image'];
}
//return implode(', ',$images);
return $images;
}
每个产品都有存储在交叉表中的多个图像的URL,我需要添加到阵列,它一个上午都在战斗我...任何想法将不胜感激。在此先感谢:)这里
OK是嵌入在阵列中的SQL工作
'gallery_images' => $this->db->query("SELECT `image` FROM " . DB_PREFIX . "product_image WHERE `product_id` = '" . (int)$data['product_id'] . "'")
但它返回这样的:
[gallery_images] => stdClass Object (
[row] => Array ([image] => motorcycle/12_06_27/031.JPG)
[rows] => Array ([0] => Array ([image] => motorcycle/12_06_27/031.JPG))[num_rows] => 1)))
所有我想要的是['image']
一部分。
@dkelliner所以,你的答案是正确的我的问题,但我已经尝试了所有这些情况下,他们仍然打破这就是为什么我感到困惑。如果我直接在数组中嵌入sql,它会工作,但它返回一堆我不需要的东西。我已经添加到上面的代码来显示我的结果。 – handmdmr
告诉我它不是“getProductGalleryImages”vs“getGalleryImages”:) – dkellner
(另外,你正在查询里面的查询对你的速度来说不是很健康,还有其他方法,但这是另外一个问题。) – dkellner