2016-01-25 174 views
0

我想获得原价,特价,从产品ID在Magento 2,我们使用下面的代码全部产品类型,但不工作如何从产品ID获得产品信息在Magento 2

<?php 
namespace Namespace\Module\Model; 

use Magento\Framework\Model\AbstractModel; 
use Magento\Framework\Model\Context; 
use Magento\Store\Model\ScopeInterface; 
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory as ProductCollectionFactory; 
use Namespace\Module\Model\ResourceModel\Subscription\CollectionFactory as SubscriptionCollectionFactory; 

class Observer extends AbstractModel{ 

     protected $_storeManager; 
     protected $_productCollectionFactory; 
     protected $_objectManager; 
     protected $_currency; 

     public function __construct(
    Context $context, 
    \Magento\Store\Model\StoreManagerInterface $storeManager, 
     \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, 
    \Magento\Framework\ObjectManagerInterface $objectManager, 
    ProductCollectionFactory $productCollectionFactory, 
    SubscriptionCollectionFactory $subscriptionCollectionFactory, 
    \Magento\Directory\Model\Currency $currency 
    ) 
    { 
    $this->_scopeConfig = $scopeConfig; 
    $this->_storeManager = $storeManager; 
    $this->_objectManager = $objectManager; 
    $this->_productCollectionFactory = $productCollectionFactory; 
     $this->subscriptionCollectionFactory = $subscriptionCollectionFactory; 
    $this->_currency = $currency; 
    } 

    public function sendalert() { 

    $data = $this->subscriptionCollectionFactory->create() 
     ->addFieldToSelect('*') 
     ->addFieldToFilter('subscription_status', 0); 



    $collection = $this->_productCollectionFactory->create() 
       ->addAttributeToFilter('status', 1) 
       ->addAttributeToFilter('visibility', 4) 
       ->addAttributeToSelect('*'); 
    $prodIds = $collection->getAllIds(); 



    foreach($prodIds as $productId) 
    { 
     $om = \Magento\Framework\App\ObjectManager::getInstance(); 
     $pdata = $this->_objectManager()->create('Magento\Catalog\Model\Product')->load($productId); 
     echo '>>'.$pdata->getPrice(); 
    } 

     } 


} 
+0

的可能的复制[如何通过ID magento2加载产品?](http://stackoverflow.com/questions/34894534/how-to-load-product-by-id- magento2) –

+0

可以帮助我吗? – MagikVishal

回答

-1

在Magento 2提议为此使用服务层。尝试使用\ Magento的\目录\型号\ ProductRepository :: getById方法,通过ID

获得产品试用下面的代码

$prod_id = "Your product id goes here"; 
$om = \Magento\Framework\App\ObjectManager::getInstance(); 
$pdata = $om->create('Magento\Catalog\Model\Product')->load($prod_id); 
0

下面的代码为我工作

$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); 
 
$productObject = $objectManager->create('Magento\Catalog\Model\Product'); 
 
$product  = $productObject->load('enter product id');

这里ObjectManager类就像服务或工厂类,它用于创建产品模型的对象。

让我知道如果您有任何双

+0

,但在exception.log中显示此错误:-main.CRITICAL:在/ var/www/html/magento23/vendor/magento/framework中有消息'区域代码未设置'的异常'Magento \ Framework \ Exception \ LocalizedException' App/State.php:139 – MagikVishal

0

尝试这个

<?php 
    $productId = 8; 
    $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); 
    $currentproduct = $objectManager->create('Magento\Catalog\Model\Product')->load($productId); 
    echo $currentproduct->getName(); 
?> 
1

其他的答案告诉你使用直接ObjectManager,但你不应该这样做,因为你会解决的Dependency Injection的模式。只应在引导过程中使用ObejctManager,或者如果您确实有理由使用它。

更好的方法是使用\Magento\Catalog\Model\ProductRepository::getById方法。您可以使用自动构造函数注入注入你ProductRepository就像你与你的其他构造函数的参数做:

$productRepository; 
public function __construct(
    Context $context, 
    \Magento\Catalog\Api\ProductRepositoryInterface $pr 
    // ... 
    ) 
{ 
    $this->productRepository = $pr; 
    // .... 
} 

不是使用

$productRepository->getById(1234); 

如果您需要关于如何使用信息库的更多信息,也许this tutorial将帮助您。

+0

但是在这个错误中出现了这个错误: - main.CRITICAL:在/ var/www/html/magento25/vendor/magento中带有消息'Area code is not set'的异常'Magento \ Framework \ Exception \ LocalizedException' /framework/App/State.php:139 – MagikVishal

+0

如果您没有在开发人员模式下运行清除生成文件夹并清除缓存:'rm -rf var/generation/* var/cache/*'。 – bpoiss

+0

仍然有同样的错误 – MagikVishal

0

试试下面

use Magento\Catalog\Model\ProductFactory; 
/** 
* @var ProductFactory 
*/ 
protected $_modelProductFactory; 
public function __construct(
    ...  
    ProductFactory $modelProductFactory, 
    ... 
) 
{   
    $this->_modelProductFactory = $modelProductFactory; 
    ... 
} 

public function getProductInformation($productId) 
{ 
    return $this->_modelProductFactory->create()->load($productId); 
} 
+0

欢迎使用Stack Overflow。请在答案中添加更多解释。每个答案都必须在本网站有足够的解释。 –

相关问题