Skip to content

Magento 2 – Model does not extend MagentoFrameworkDataObject

I’m trying to view a grid in database but I’m stuck on this error:

Es100ProductNotifierModelResourceModelSubscriptionGridSubscriptionModel does not extend MagentoFrameworkDataObject

Collection.php

 <?php
    

namespace Es100ProductNotifierModelResourceModelSubscriptionGrid;

use MagentoFrameworkViewElementUiComponentDataProviderSearchResult;


class Collection extends SearchResult
{
    protected $_idFieldName = 'subscription_id';
  
/**
     * Collection constructor.
     * 
     * @param MagentoFrameworkDataCollectionEntityFactoryInterface $entityFactory
     * @param PsrLogLoggerInterface $logger
     * @param MagentoFrameworkDataCollectionDbFetchStrategyInterface $fetchStrategy
     * @param MagentoFrameworkEventManagerInterface $eventManager
     */
    public function __construct(
        MagentoFrameworkDataCollectionEntityFactoryInterface $entityFactory,
        PsrLogLoggerInterface $logger,
        MagentoFrameworkDataCollectionDbFetchStrategyInterface $fetchStrategy,
        MagentoFrameworkEventManagerInterface $eventManager,
     $connection = null,
     $resource = null
    ) {
        parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
    }
    protected function _construct()
    {
        $this->_init(SubscriptionModel::class, SubscriptionResource::class);
    }
}

ModelResourceModelSubscription.php

 <?php

namespace Es100ProductNotifierModelResourceModel;

use MagentoFrameworkModelResourceModelDbAbstractDb;

class Subscription extends AbstractDb
{
    protected function _construct()
    {
        $this->_init('es100_productnotifier_subscription', 'subscription_id');
    }
}

ModelSubscription.php

<?php

namespace Es100ProductNotifierModel;

use MagentoFrameworkModelAbstractModel;
use MagentoFrameworkDataObjectIdentityInterface;

class Subscription extends AbstractModel implements IdentityInterface
{
    const CACHE_TAG = 'es100_productnotifier_subscription';

    protected $_cacheTag = self::CACHE_TAG;
    protected $_eventPrefix = 'es100_productnotifier_subscription';

    protected function _construct()
    {
        $this->_init(Es100ProductNotifierModelResourceModelSubscription::class);
    }

    public function getIdentities()
    {
        return [self::CACHE_TAG . '_' . $this->getId()];
    }
}

di.xml

    <?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">

    <!-- Configurazione della CollectionFactory per la UI Component Grid -->
    <type name="MagentoFrameworkViewElementUiComponentDataProviderCollectionFactory">
        <arguments>
            <argument name="collections" xsi:type="array">
                <item name="es100_productnotifier_subscription_listing_data_source" xsi:type="string">Es100ProductNotifierModelResourceModelSubscriptionGridCollection</item>
            </argument>
        </arguments>
    </type>
    <!-- Definizione VirtualType per la Collection -->
    <virtualType name="Es100ProductNotifierModelResourceModelSubscriptionGridCollection" 
                 type="MagentoFrameworkViewElementUiComponentDataProviderSearchResult">
        <arguments>
            <argument name="mainTable" xsi:type="string">es100_productnotifier_subscription</argument>
            <argument name="resourceModel" xsi:type="string">Es100ProductNotifierModelResourceModelSubscription</argument>
        </arguments>
    </virtualType>
</config>

subscription_listing

<?xml version="1.0" encoding="UTF-8"?>
<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
    
    <argument name="data" xsi:type="array">
        <item name="js_config" xsi:type="array">
            <item name="provider" xsi:type="string">es100_productnotifier_subscription_listing.es100_productnotifier_subscription_listing_data_source</item>
            <item name="deps" xsi:type="string">es100_productnotifier_subscription_listing.es100_productnotifier_subscription_listing_data_source</item>
        </item>
        <item name="spinner" xsi:type="string">subscription_columns</item>
    </argument>

    <dataSource name="es100_productnotifier_subscription_listing_data_source">
        <argument name="dataProvider" xsi:type="configurableObject">
            <argument name="class" xsi:type="string">MagentoFrameworkViewElementUiComponentDataProviderDataProvider</argument>
            <argument name="name" xsi:type="string">es100_productnotifier_subscription_listing_data_source</argument>
            <argument name="primaryFieldName" xsi:type="string">subscription_id</argument>
            <argument name="requestFieldName" xsi:type="string">id</argument>
             <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="component" xsi:type="string">Magento_Ui/js/grid/provider</item>
                    <item name="update_url" xsi:type="url" path="mui/index/render"/>
                    <item name="storageConfig" xsi:type="array">
                        <item name="indexField" xsi:type="string">subscription_id</item>
                    </item>
                </item>
            </argument>
        </argument>
    </dataSource>

    <listingToolbar name="listing_top">
        <paging name="listing_paging"/>
    </listingToolbar>

<columns name="subscription_columns">
    <selectionsColumn name="ids">
        <settings>
            <indexField>subscription_id</indexField>
        </settings>
    </selectionsColumn>
    
    <column name="subscription_id">
        <settings>
            <filter>textRange</filter>
            <sorting>asc</sorting>
            <label>ID</label>
        </settings>
    </column>

    <column name="email">
        <settings>
            <filter>text</filter>
            <sorting>asc</sorting>
            <label>Email</label>
        </settings>
    </column>

    <column name="product_id">
        <settings>
            <filter>text</filter>
            <sorting>asc</sorting>
            <label>Product ID</label>
        </settings>
    </column>

    <column name="is_sent">
        <settings>
            <filter>select</filter>
            <sorting>asc</sorting>
            <label>Email Sent</label>
            <options>
                <option name="0" xsi:type="array">
                    <item name="value" xsi:type="number">0</item>
                    <item name="label" xsi:type="string">No</item>
                </option>
                <option name="1" xsi:type="array">
                    <item name="value" xsi:type="number">1</item>
                    <item name="label" xsi:type="string">Yes</item>
                </option>
            </options>
        </settings>
    </column>

    <column name="created_at">
        <settings>
            <filter>dateRange</filter>
            <sorting>desc</sorting>
            <label>Created At</label>
        </settings>
    </column>
</columns>

   
</listing>

Anyone have a solution?