Loading...
Loading...
Designs and implements data layer architecture for Magento 2. Use when creating data models, designing database schemas, implementing repositories, or working with EAV/flat table structures. Masters entity design, repository patterns, collections, and database optimization.
npx skill4agent add maxnorm/magento2-agent-skills magento-model-developer<?php
declare(strict_types=1);
namespace Vendor\Module\Model;
use Magento\Framework\Model\AbstractModel;
use Vendor\Module\Model\ResourceModel\Entity as ResourceModel;
class Entity extends AbstractModel
{
protected function _construct(): void
{
$this->_init(ResourceModel::class);
}
}<?php
declare(strict_types=1);
namespace Vendor\Module\Model\ResourceModel;
use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
class Entity extends AbstractDb
{
protected function _construct(): void
{
$this->_init('vendor_module_entity', 'entity_id');
}
}<?php
declare(strict_types=1);
namespace Vendor\Module\Model\ResourceModel\Entity;
use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
use Vendor\Module\Model\Entity;
use Vendor\Module\Model\ResourceModel\Entity as ResourceModel;
class Collection extends AbstractCollection
{
protected function _construct(): void
{
$this->_init(Entity::class, ResourceModel::class);
}
}<?php
declare(strict_types=1);
namespace Vendor\Module\Model;
use Vendor\Module\Api\Data\EntityInterface;
use Vendor\Module\Api\EntityRepositoryInterface;
use Vendor\Module\Model\ResourceModel\Entity as ResourceModel;
use Magento\Framework\Exception\NoSuchEntityException;
class EntityRepository implements EntityRepositoryInterface
{
/**
* @param ResourceModel $resource
*/
public function __construct(
private readonly ResourceModel $resource
) {
}
/**
* @param int $id
* @return EntityInterface
* @throws NoSuchEntityException
*/
public function getById(int $id): EntityInterface
{
$entity = $this->resource->load($id);
if (!$entity->getId()) {
throw new NoSuchEntityException(__('Entity with id "%1" does not exist.', $id));
}
return $entity;
}
}<?xml version="1.0"?>
<schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd">
<table name="vendor_module_entity" resource="default" engine="innodb" comment="Entity Table">
<column xsi:type="int" name="entity_id" unsigned="true" nullable="false" identity="true" comment="Entity ID"/>
<column xsi:type="varchar" name="name" length="255" nullable="false" comment="Name"/>
<column xsi:type="timestamp" name="created_at" nullable="false" default="CURRENT_TIMESTAMP" comment="Created At"/>
<constraint xsi:type="primary" referenceId="PRIMARY">
<column name="entity_id"/>
</constraint>
<index referenceId="VENDOR_MODULE_ENTITY_NAME" indexType="btree">
<column name="name"/>
</index>
</table>
</schema>