Trabalhando com Banco de Dados
Trabalhando com Banco de Dados no Magento 2
- Descrever os conceitos básicos de models, resource models e collections
- Descrever como ocorre a leitura e gravação de uma entidade
- Descrever como filtrar, ordenar e especificar os valores selecionados para collections e repositories
- Demonstrar habilidade para usar o esquema declarativo (declarative schema)
Descrever os conceitos básicos de models, resource models e collections
Quais são as responsabilidades de cada um dos tipos de objeto ORM (Object Relational Mapping ou Mapeamento Objeto Relacional)? Como eles se relacionam uns com os outros?
Os objetos ORM são construídos em torno de models, resource models e resource collections. Temos quatro elementos no Magento:
- Models
- Definem os dados e comportamento de entidades.
- São uma camada de abstração de dados em forma de objeto (classe)
- Models não tem acesso direto ao banco de dados, apenas os resource models.
- Resources
- Conecta com o banco de dados através de adaptadores.
- Resource Models
- Mapeadores de dados para estruturas de armazenamento.
- Resource Models são responsáveis por:
- Executar todas operações CRUD (Criar, Ler, Atualizar, Apagar registros)
- Lógica de negócios. Um Resource Model pode fazer validações dos dados, iniciar processos antes ou depois que um dado é salvo, ou realizar outras operações no banco.
- Collections
- Armazena conjuntos de modelos e funcionalidades relacionadas, incluindo filtragem, classificação e paginação.
- Classe que carrega vários models e devolve (geralmente) um objeto como um array ou algo parecido.
Descrever como ocorre a leitura e gravação de uma entidade
Como você utiliza o método nativo de gravação/leitura no processo de desenvolvimento?
Processo de carregamento (load process)
- Primeiro o método
beforeLoad
é chamado (esse ponto é ótimo para usar um plugin). - Cria conexão com o banco de dados e carrega uma consulta de seleção usando parâmetros para buscar a linha e definir os dados.
- O método
afterLoad
é chamado (bom para plugins) - O objetos é retornado.
Processo de salvamento (save process)
- Uma transação é iniciada
- Se nada foi modificado na entidade, a transação é confirmada e o método retornado
beforeSave
é chamado (este é um bom ponto para plugins)- Se o salvamento for permitido, a representação do banco de dados é atualizada ou criada
- O método
afterSave
é chamado. Quaisquer exceções lançadas na execução deste método cancelarão a transação.
Descrever como filtrar, ordenar e especificar os valores selecionados para collections e repositories
Como você seleciona um subconjunto de registros do banco de dados?
…
Demonstrar habilidade para usar o esquema declarativo (declarative schema)
Ver: https://devdocs.magento.com/guides/v2.4/extension-dev-guide/declarative-schema/
Como você adiciona uma coluna usando o declarative schema?
O nó column
adiciona uma coluna. Conforme no exemplo abaixo, que está adicionando a coluna date_closed:
<schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd">
<table name="declarative_table">
<column xsi:type="int" name="id_column" padding="10" unsigned="true" nullable="false" comment="Entity Id"/>
<column xsi:type="int" name="severity" padding="10" unsigned="true" nullable="false" comment="Severity code"/>
<column xsi:type="varchar" name="title" nullable="false" length="255" comment="Title"/>
<column xsi:type="timestamp" name="time_occurred" padding="10" comment="Time of event"/>
+ <column xsi:type="timestamp" name="date_closed" padding="10" comment="Time of event"/>
<constraint xsi:type="primary" referenceId="PRIMARY">
<column name="id_column"/>
</constraint>
</table>
</schema>
Como você modifica uma tabela adicionada por outro módulo? Como você exclui uma coluna? Como você adiciona um índice ou chave estrangeira usando o esquema declarativo? Como você manipula dados usando patches de dados? Qual é o propósito dos patches de esquema?