Выберите продукты по атрибуту данных в Magento


Я создал новый продукт с пользовательским атрибутом данных.

$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 ('каталог/продукт').

Как я могу запросить продукты с "крышкой" 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
Author: Pim Reijersen, 2016-11-03

3 answers

Для создания атрибута запустите этот скрипт в корневом каталоге 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();

?>

Теперь ваш атрибут создан, смотрите, я создал
Затем установите значение, которое вы хотите видеть

Попробуйте сделать это для фильтрации продукта по атрибуту.

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

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

Получить продукт с крышкой Существует

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


foreach ($product as $products) { 
    if($products->getLid()){
       echo $products->getName().'-->'.$products->getLid().'<br>';
    }
}
 1
Author: Ketan Borada, 2016-11-16 12:52:56

Если есть только один продукт, который можно загрузить с помощью

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

Если вам нужно загрузить коллекцию

$product = Mage::getModel('catalog/product')
    ->getCollection()
    ->addAttributeToFilter('lid', 123);
 0
Author: juporag, 2016-11-14 15:05:31

Теоретически вы можете отфильтровать коллекцию продуктов:

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

foreach ($product as $products) { /** @var Mage_Catalog_Model_Product $product */
    // Product Collection Here
}
 0
Author: Robbie Averill, 2016-11-17 07:56:31