It's caused by the fact that your model constructor does not match your original model constructor.
So this is the constructor from Magento\Newsletter\Model\Queue
:
public function __construct(
\Magento\Framework\Model\Context $context,
\Magento\Framework\Registry $registry,
\Magento\Newsletter\Model\Template\Filter $templateFilter,
\Magento\Framework\Stdlib\DateTime\DateTime $date,
\Magento\Newsletter\Model\TemplateFactory $templateFactory,
\Magento\Newsletter\Model\ProblemFactory $problemFactory,
\Magento\Newsletter\Model\ResourceModel\Subscriber\CollectionFactory $subscriberCollectionFactory,
\Magento\Newsletter\Model\Queue\TransportBuilder $transportBuilder,
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
array $data = []
) {
parent::__construct(
$context,
$registry,
$resource,
$resourceCollection,
$data
);
$this->_templateFilter = $templateFilter;
$this->_date = $date;
$this->_templateFactory = $templateFactory;
$this->_problemFactory = $problemFactory;
$this->_subscribersCollection = $subscriberCollectionFactory->create();
$this->_transportBuilder = $transportBuilder;
}
To fix your constructor it needs to be:
public function __construct(
\Magento\Framework\Model\Context $context,
\Magento\Framework\Registry $registry,
\Magento\Newsletter\Model\Template\Filter $templateFilter,
\Magento\Framework\Stdlib\DateTime\DateTime $date,
\Magento\Newsletter\Model\TemplateFactory $templateFactory,
\Magento\Newsletter\Model\ProblemFactory $problemFactory,
\Magento\Newsletter\Model\ResourceModel\Subscriber\CollectionFactory $subscriberCollectionFactory,
\Magento\Newsletter\Model\Queue\TransportBuilder $transportBuilder,
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
\Vendor\Module\Block\Testing $customergroup,
\Magento\Customer\Model\ResourceModel\Group\Collection $customergroupdata,
array $data = []
)
{
$this->_customergroup = $customergroup;
$this->_customergroupdata = $customergroupdata;
parent::__construct(
$context,
$registry,
$templateFilter,
$date,
$templateFactory,
$problemFactory,
$subscriberCollectionFactory,
$transportBuilder,
$resource,
$resourceCollection,
$data
);
}
Because your collection should extend Mage_Core_Model_Resource_Db_Collection_Abstract
, not Mage_Core_Model_Resource_Db_Abstract
.
But be careful with Collection::getData()
. I described the pitfalls with this method here: How to correctly select the first item from a filtered collection?
getData()
on collections works different from other methods. It does
not check if the collection is loaded, instead it checks if the
_data
property is empty. When you load a collection, _data
is
not populated, only when you call getData()
!
[...]
This results in a second database query as soon as you call
getData()
and this time, your new filter is applied. But it does not
change the _items
property, so your previously loaded result is
still used for everything else.
By the way, I still did not come across any reasonable use case for
this method. It's used internally by load()
but probably should not
have been public. The core doesn't use it from outside the collection
class anywhere as far as I see.
Use getItems()
instead to inspect the items of the collection.
Best Answer
It looks like you are trying to do sql queries from within class. Need to do something like this