我正在研究一些脚本来自动化网店内的一些东西。
我查看了许多论坛和问题 现在我几乎完成了我的剧本,但有一件小事不起作用,但我想不出我做错了什么。
此脚本的目标是获取与数组中的值具有相同属性值的产品(从数据库中提取)。
所以这是我的代码:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once('../app/Mage.php');
require_once('db.php');
Mage::app();
$db = db_connection();
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('ean');
$getean = $db->prepare('SELECT ean_l FROM mytable');
$getean->execute();
$allean = $getean->fetchAll();
foreach($allean as $ean) {
$collection->addFieldToFilter(array(
array('attribute'=>'ean','eq'=>'' . $ean['ean_l'] . ''),
));
echo 'ean_l: ' . $ean['ean_l'] . '<br>';
foreach ($collection as $product) {
echo $product['entity_id'];
}
}
所以这是它的工作原理:
我们选择一个属性(ean)
我们从数据库中获得所有ean编号的列表
我们遍历列表并将任何产品与ean编号进行比较
然后我们遍历集合并获取相应产品的ID
然而,所有$product['entity_id']
都是273.正确的是,entity_id是273,但也有产品274具有相应的ean编号。
以下是脚本的结果(它还有很多):
那为什么呢?因为在我的推理中,它改变了每个循环的ean_l,并将其与属性值相等 然后它应该改变收藏,对吗? 所以不应该至少在某一点上显示274?
这个问题对于Magento程序员来说并不是特别的,但其他程序员也可以提供帮助,所以我想把它发布在SO上。
答案 0 :(得分:0)
Magento带有强大的过滤和查询集合。如果不满足,您可以随时使用自定义查询扩展到getSelect
函数。一些信息here。
在该foreach中使用addFieldToFilter
将在另一次迭代过滤后过滤剩余的值。所以这不好。
$allean = array("of", "ean", "values", "needed", "for", "filtering");
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('ean');
//addAttributeToFilter for EAV collections
$collection->addAttributeToFilter('ean', array('in' => $allean)); //not addFieldToFilter
$collection->getColumnValues('entity_id');
var_dump($collection); //will output an array of product_ids
或者,如果要按ean
值进行分组,则应删除getColumnValues
并运行group命令。
您可以找到其他信息here。
或者您只需删除getColumnValues
,即可手动启动foreach($collection as $product)
并进行分组,或使用这些已过滤的产品执行您想要的操作。