在Magento中按数据属性选择产品

时间:2016-11-03 14:13:38

标签: php magento magento-1.9

我创建了一个带有自定义数据属性的新产品。

$product = Mage::getModel('catalog/product');
$product->setStatus(Mage_Catalog_Model_Product_Status::STATUS_ENABLED);
$product->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH);
$product->setName('name');
$product->setDescription('description');
$product->setPrice(1.24);
$product->setData('lid', 123);
$product->save

现在我想使用Mage :: getModel(' catalog / product')查询此产品。

如何查询带有'的产品? 123?

如何查询“盖子”的产品?存在又不是空的吗?

=====

使用addAttributeToFilter执行查询时的错误日志。

( ! ) Fatal error: Call to a member function getBackend() on boolean in /Users/asdf/Sites/magento19.dev/app/code/core/Mage/Eav/Model/Entity/Abstract.php on line 816
Call Stack
#   Time    Memory  Function    Location
1   0.0002  249016  {main}( )   .../index.php:0
2   0.0024  514024  Mage::run( )    .../index.php:87
3   0.0085  1433456 Mage_Core_Model_App->run( ) .../Mage.php:684
4   0.0729  7141088 Mage_Core_Controller_Varien_Front->dispatch( )  .../App.php:354
5   0.0776  7404488 Mage_Core_Controller_Varien_Router_Standard->match( )   .../Front.php:172
6   0.0825  7941968 Mage_Core_Controller_Varien_Action->dispatch( ) .../Standard.php:250
7   0.1205  10859488    Asdf_Sync_Adminhtml_SyncbackendController->indexAction( )   .../Action.php:418
8   0.1535  13447744    Asdf_Sync_Adminhtml_SyncbackendController->performSync( )   .../SyncbackendController.php:18
9   0.1542  13504568    Asdf_Sync_Helper_Data->pushProducts( )  .../SyncbackendController.php:33
10  0.3723  17554640    Mage_Catalog_Model_Resource_Product_Collection->addAttributeToFilter( ) .../Data.php:67
11  0.3723  17555008    Mage_Eav_Model_Entity_Collection_Abstract->addAttributeToFilter( )  .../Collection.php:1438
12  0.3723  17555360    Mage_Eav_Model_Entity_Collection_Abstract->_getAttributeConditionSql( ) .../Abstract.php:321
13  0.3723  17555472    Mage_Eav_Model_Entity_Abstract->isAttributeStatic( )    .../Abstract.php:1379

3 个答案:

答案 0 :(得分:2)

对于create attribute,在magento根目录中运行此脚本(可以根据需要进行编辑)

<?php  

require_once('app/Mage.php');
 Mage::app()->setCurrentStore(Mage::getModel('core/store')->load(Mage_Core_Model_App::ADMIN_STORE_ID));

$installer = new Mage_Eav_Model_Entity_Setup('core_setup');
$installer->startSetup();                   

$installer->addAttribute('catalog_product', 'lid', array(
             'label'             => 'LId',
             'type'              => 'int',
             'input'             => 'text',
             'backend'           => '',
             'frontend'          => '',
             'global'            => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
             'visible'           => true,
             'required'          => false,
             'user_defined'      => false,
             'searchable'        => false,
             'filterable'        => false,
             'comparable'        => false,
             'visible_on_front'  => true,
             'visible_in_advanced_search' => false,
             'unique'            => false
));
$installer->endSetup();

?>

现在您的属性已创建,请参阅我有created
然后设置您想要的值see

按属性过滤产品。

$product = Mage::getModel('catalog/product')
    ->getCollection()
    ->addAttributeToFilter('lid', 123);

foreach ($product as $products) { 
    echo '<pre>';
    print_r($products);
}

使用Lid Exist获取产品

$product = Mage::getModel('catalog/product')
    ->getCollection();


foreach ($product as $products) { 
    if($products->getLid()){
       echo $products->getName().'-->'.$products->getLid().'<br>';
    }
}

答案 1 :(得分:0)

理论上,您可以过滤产品系列:

$product = Mage::getModel('catalog/product')
    ->getCollection()
    ->addAttributeToFilter('lid', 123);

foreach ($product as $products) { /** @var Mage_Catalog_Model_Product $product */
    // Product Collection Here
}

答案 2 :(得分:0)

如果只有一个产品可以加载

$product = Mage::getModel('catalog/product')->load(123,'lid')

如果您需要加载集合

$product = Mage::getModel('catalog/product')
    ->getCollection()
    ->addAttributeToFilter('lid', 123);