Magento 2 - 没有魔法吸气剂和二传手

时间:2016-01-26 22:52:59

标签: php magento magento2

我正在尝试写入数据库,如 -

$album = $this->_pageFactory->create('Company\Project\Model\Album');
$album->setProductId($product->getId());
$album->setProductAlbumId($albumId);
$album->save();

但是,在第三行和第四行,我收到以下错误。我确信albumID和product-> getId()按预期工作。

  

PHP致命错误:调用未定义的方法   Magento \ Backend \ Model \ View \ Result \ Page \ Interceptor :: setProductId()in   /Applications/MAMP/htdocs/magento2/app/code/Company/Project/Helper/Data.php

我的模型文件看起来像这样。你看,我已经尝试手动声明了setter方法,但它们仍然没有被拾取。

<?php

namespace Company\Project\Model;

class Album extends \Magento\Framework\Model\AbstractModel {

    public function __construct(
    \Magento\Framework\Model\Context $context,
    \Magento\Framework\Registry $registry,
    \Psr\Log\LoggerInterface $logger,
    \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
    \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
    array $data = []
    ) {
       $this->_logger = $logger;
       parent::__construct($context, $registry, $resource, $resourceCollection, $data);
    }

  public function _construct() {
    $this->_init('Company\Project\Model\Resource\Album');
  }

  public function setProductId($productId) {
    return $this->setData(self::PRODUCT_ID, $productId);
  }

  public function setProjectAlbumId($albumId) {
    return $this->setData(self::PROJECT_ALBUM_ID, $albumId);
  }
}

我正在关注this answer

中的pageFactory模式

另外,如果Magento 2中有另一种方式可以达到相同的效果,请建议。像制作直接SQL INSERT语句之类的东西对我有用。

1 个答案:

答案 0 :(得分:0)

方法\Magento\Framework\DataObject::__call提供的魔术setter和getter仅适用于从类\Magento\Framework\DataObject继承的对象。这就是面向对象编程的工作方式。

查看您的模型Magento\Backend\Model\View\Result\Page,它不会继承上述类。它并不是一个真正的问题,我应该使用哪种模式给吸气剂和制定者&#34;。我想你应该先问一下为什么你首先要对这个物体需要魔术定位器然后保存它。我并没有过多地关注您正在使用的Page对象,但它看起来不像您通过save()保存的对象。