Question

I have no idea why my Subscriber Collection Factory is not working. Below is my code. Wish someone can help me to fix my problem. I believe something wrong with my setup of CollectionFactory

use Magento\Newsletter\Model\ResourceModel\Subscriber\CollectionFactory;

public function __construct(
        CollectionFactory $subscriberCollection
    ) {
        $this->subscriberCollection = $subscriberCollection;
    }

public function  getSubscriberStatus()
    {

        $subscribers = $this->subscriberCollection->create();
        $subscribers->addAttributeToSelect("*");

/************** don't know why code not keep run after above *****************/

        $currtDate = date("Y-m-d H:i:s"); // Y-m-d h:i:s
        $newDate = strtotime('-1 MONTH', strtotime($currtDate));
        $newDate = date('Y-m-d H:i:s', $newDate);

        $subscribers->addFieldToFilter('change_status_at', ['gteq' => $newDate]);
        $subscribers->addFieldToFilter('change_status_at', ['lteq' => $currtDate]);

        $subscribers->load();

        return $subscribers;

    }

my query

select * from newsletter_subscriber where change_status_at >=  (NOW() - INTERVAL 1 MONTH);

object manager method

public function  getSubscriberStatus()
{
    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
    $resource = $objectManager->get('Magento\Framework\App\ResourceConnection');
    $connection = $resource->getConnection();
    $query = "select * from newsletter_subscriber where change_status_at >=  (NOW() - INTERVAL 1 MONTH);";
    $result = $connection->fetchAll($query);

    return $result;
}

update:

use Exception;
use Magento\Email\Model\BackendTemplate;
use Magento\Framework\App\Area;
use Magento\Framework\App\Helper\Context;
use Magento\Framework\DB\Adapter\AdapterInterface;
use Magento\Framework\HTTP\Client\Curl;
use Magento\Framework\Mail\Template\TransportBuilder;
use Psr\Log\LoggerInterface;
use Magento\Framework\Serialize\SerializerInterface;
use Magento\Customer\Api\CustomerRepositoryInterface;
use Magento\Customer\Model\CustomerFactory;
use Zend_Db_Expr;


/**
 * Class Check
 *
 * @package 
 */
class Check
{
    /**
     * @var SerializerInterface
     */
    private $serializer;



    /**
     * @var LoggerInterface
     */
    private $logger;

    /**
     * @var TransportBuilder
     */
    private $transportBuilder;

    /**
     * @var BackendTemplate
     */
    private $emailTemplate;

    /**
     * @var Curl
     */
    protected $curl;

    /**
     * @var CustomerRepositoryInterface
     */
    private $customerRepo;


    protected $subscriberCollection;


    /**
     * Check constructor.
     *
     * @param SerializerInterface $serializer
     * @param CollectionFactory   $collectionFactory
     * @param LoggerInterface     $logger
     * @param TransportBuilder    $transportBuilder
     * @param BackendTemplate     $emailTemplate
     * @param CustomerRepositoryInterface $customerRepo
     * @param Curl $curl
     */
    public function __construct(
        SerializerInterface $serializer,
        //CollectionFactory $collectionFactory,
        LoggerInterface $logger,
        TransportBuilder $transportBuilder,
        BackendTemplate $emailTemplate,
        CustomerRepositoryInterface $customerRepo,
        CustomerFactory $customerFactory,
        \Magento\Newsletter\Model\ResourceModel\Subscriber\CollectionFactory $subscriberCollectionFactory,
        Curl $curl
    ) {
        $this->serializer = $serializer;
        //  $this->collectionFactory = $collectionFactory;
        $this->logger = $logger;
        $this->transportBuilder = $transportBuilder;
        $this->emailTemplate = $emailTemplate;
        $this->customerRepo = $customerRepo;
        $this->customerFactory = $customerFactory;
        $this->_subscribersCollection = $subscriberCollectionFactory->create();
        $this->curl = $curl;
    }


  
    public function  getSubscriberStatus()
    {

        $subscribers = $this->_subscribersCollection;
        $subscribers->addAttributeToSelect("*");

        $currtDate = date("Y-m-d H:i:s"); // Y-m-d h:i:s
        $newDate = strtotime('-10 day', strtotime($currtDate));
        $newDate = date('Y-m-d H:i:s', $newDate);

        $subscribers->addFieldToFilter('change_status_at', ['gteq' => $newDate]);
        $subscribers->addFieldToFilter('change_status_at', ['lteq' => $currtDate]);

        $subscribers->load();

        return $subscribers;

    }

No correct solution

OTHER TIPS

Try this :-

protected $subscriberCollection;

public function __construct(
    \Magento\Newsletter\Model\ResourceModel\Subscriber\CollectionFactory $subscriberCollectiona
) {
    $this->subscriberCollection = $subscriberCollection;
}

public function getSubscriberCollection() 
{
    $subscriberCollection =$this->subscriberCollection->create();
    foreach($subscriberCollection as $subscriber)
    {
        print_r($subscriber->getData());
    }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top