{"id":1140,"date":"2018-11-27T02:00:13","date_gmt":"2018-11-27T04:00:13","guid":{"rendered":"https:\/\/magenteiro.com\/blog\/?p=1140"},"modified":"2022-08-24T21:05:02","modified_gmt":"2022-08-25T00:05:02","slug":"como-usar-o-repository-pattern-no-magento-2","status":"publish","type":"post","link":"https:\/\/www.magenteiro.com\/blog\/magento-2\/como-usar-o-repository-pattern-no-magento-2\/","title":{"rendered":"Como usar o Repository Pattern no Magento 2"},"content":{"rendered":"<p>A melhor forma de carregar entidades no Magento 2 \u00e9 atrav\u00e9s do uso de <em>Repository<\/em>.<\/p>\n<p>Neste tutorial veremos como o novo <em>design pattern<\/em> pode ser usado e como ele foi introduzido ao Magento 2. Ao longo deste artigo voc\u00ea ver\u00e1:<\/p>\n<ul>\n<li>O que s\u00e3o os reposit\u00f3rios no Magento 2<\/li>\n<li>Exemplo de uso de <em>Dependency Injection <\/em>(Inje\u00e7\u00e3o de depend\u00eancias)<\/li>\n<li>Como pegar todos os produtos no Magento 2<\/li>\n<li>Como filtrar, ordenar, e paginar ou limitar estes resultados<\/li>\n<li>Como usar o <code>SearchCriteriaBuilder<\/code> no Magento 2<\/li>\n<\/ul>\n<p>Reposit\u00f3rio \u00e9 a forma preferida para carregar entidades no Magento, pois eles d\u00e3o uma camada a mais de abstra\u00e7\u00e3o na forma como os dados s\u00e3o armazenados &#8211; no entanto n\u00e3o precisamos saber disso, s\u00f3 queremos carregar os dados.<\/p>\n<p>Reposit\u00f3rios tamb\u00e9m s\u00e3o parte da API do Magento. Isso (felizmente) quer dizer que o Magento manter\u00e1 compatibilidade reversa em futuras classes e m\u00e9todos, e nosso c\u00f3digo continuar\u00e1 funcionando em vers\u00f5es mais novas.<\/p>\n<p>Como exemplo, n\u00f3s vamos construir um novo <em>Block<\/em> que carregar\u00e1 os 5 produtos mais pesados do nosso cat\u00e1logo.<\/p>\n<h2>Configurando a classe<\/h2>\n<p>Antes de come\u00e7ar, n\u00f3s precisamos configurar o <em>namespace<\/em>, adicionar alguns <code>use<\/code>, e garantir que a classe do nosso bloco estende a classe <em>core<\/em> <code>Template<\/code>. Tamb\u00e9m adicionei um esbo\u00e7o de um m\u00e9todo (<em>stub<\/em>) que vamos usar para carregar nossa lista de produtos.<\/p>\n<blockquote><p>Este artigo parte do princ\u00edpio que voc\u00ea j\u00e1 criou a <a href=\"https:\/\/magenteiro.com\/blog\/magento-2\/como-criar-um-modulo-para-magento-2\/\">estrutura de um m\u00f3dulo para Magento 2<\/a>.<\/p><\/blockquote>\n<p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-title=\"\">namespace Magenteiro\\HeavyProducts\\Block;\n\nuse Magento\\Catalog\\Api\\Data\\ProductInterface;\nuse Magento\\Catalog\\Api\\ProductRepositoryInterface;\nuse Magento\\Framework\\Api\\SearchCriteriaBuilder;\nuse Magento\\Framework\\Api\\SortOrder;\nuse Magento\\Framework\\Api\\SortOrderBuilder;\nuse Magento\\Framework\\View\\Element\\Template;\nuse Magento\\Framework\\View\\Element\\Template\\Context;\n\nclass ListProduct extends Template\n{\n\n    \/**\n     * @return ProductInterface[]\n     *\/\n    public function getProducts()\n    {}\n\n}<\/pre><\/p>\n<h2>Injetando as depend\u00eancias<\/h2>\n<blockquote><p>Se voc\u00ea \u00e9 aluno do <a href=\"https:\/\/www.magenteiro.com\/magento2?utm_source=blog\">curso de Magento 2<\/a>, j\u00e1 deve estar dominando o assunto de inje\u00e7\u00e3o de depend\u00eancias. Caso n\u00e3o seja, tem uma aula gr\u00e1tis sobre o assunto l\u00e1 no site do curso onde eu desmistifico esse assunto.<\/p><\/blockquote>\n<p>O Magento 2 trouxe um \u00f3timo sistema de inje\u00e7\u00e3o de depend\u00eancias. <em>Dependency injection<\/em> \u00e9 uma forma sofisticada de dizer &#8220;<em>minha classe precisa acessar essas outras classes, voc\u00ea pode dar elas pra mim?<\/em>&#8220;.<\/p>\n<p>Nota: Via de regra n\u00f3s <strong>nunca<\/strong> devemos usar a classe <code>ObjectManager<\/code> diretamente para instanciar outras classes. Sempre use inje\u00e7\u00e3o de depend\u00eancia atrav\u00e9s do m\u00e9todo <code>__construct<\/code> da sua classe.<\/p>\n<blockquote class=\"twitter-tweet\" data-lang=\"en\">\n<p dir=\"ltr\" lang=\"en\">We have a new God. An invisible one. The object manager. <a href=\"https:\/\/twitter.com\/jissereitsma?ref_src=twsrc%5Etfw\">@jissereitsma<\/a> <a href=\"https:\/\/twitter.com\/benmarks?ref_src=twsrc%5Etfw\">@benmarks<\/a> <a href=\"https:\/\/twitter.com\/hashtag\/MM17HR?src=hash&amp;ref_src=twsrc%5Etfw\">#MM17HR<\/a> <a href=\"https:\/\/t.co\/x65wluQ0lJ\">pic.twitter.com\/x65wluQ0lJ<\/a><\/p>\n<p>\u2014 Nils Preu\u00df (@tutnix) <a href=\"https:\/\/twitter.com\/tutnix\/status\/842762546256011264?ref_src=twsrc%5Etfw\">March 17, 2017<\/a><\/p><\/blockquote>\n<p><script async=\"\" src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script><\/p>\n<p>N\u00f3s precisamos injetar o reposit\u00f3rio de Produto, assim como algumas outras classes construtoras que vamos falar adiante. Reposit\u00f3rios est\u00e3o geralmente localizados na pasta <code>\/Api<\/code> dos m\u00f3dulos.<\/p>\n<p>Podemos encontrar o reposit\u00f3rio de Produto em <code>&lt;Magento_Catalog&gt;\/Api\/ProductRepositoryInterface.php<\/code>. Aqui podemos ver quais m\u00e9todos est\u00e3o dispon\u00edveis e que podemos usar na interface, incluindo o que vamos usar, <code>getList<\/code>.<\/p>\n<p>Passando a classe para o nosso m\u00e9todo <code>__construct<\/code>, o Magento ir\u00e1 instanciar ele pra gente e disponibiliz\u00e1-lo internamente para nossa classe. Feito isso, tudo que precisamos fazer \u00e9 associar estes objetos a propriedades privadas na nossa pr\u00f3pria classe.<\/p>\n<p>Nota: Como nossa classe est\u00e1 estendendo outra classe (<code>Template<\/code>), n\u00f3s precisamos injetar a classe pai e todas as suas depend\u00eancias, e chamar o construtor pai a partir do nosso pr\u00f3prio construtor.<br \/>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-highlight=\"7\" data-enlighter-title=\"Miolo da nossa classe. Vamos ver tudo junto mais pra frente.\">private $productRepository;\nprivate $searchCriteriaBuilder;\nprivate $sortOrderBuilder;\n\npublic function __construct(\n    ProductRepositoryInterface $productRepository,\n    SearchCriteriaBuilder $searchCriteriaBuilder,\n    SortOrderBuilder $sortOrderBuilder,\n    Context $context,\n    array $data = []\n) {\n    parent::__construct($context, $data);\n\n    $this-&gt;productRepository = $productRepository;\n    $this-&gt;searchCriteriaBuilder = $searchCriteriaBuilder;\n    $this-&gt;sortOrderBuilder = $sortOrderBuilder;\n}<\/pre><\/p>\n<h2>Criando o <em>SearchCriteria<\/em><\/h2>\n<p>Se olharmos o m\u00e9todo <code>getList<\/code>, percebemos que ele requer um par\u00e2metro: <code>SearchCriteriaInterface<\/code>. \u00c9 por isso que precisamos injetar a classe construtora (<code>SearchCriteriaBuilder<\/code>) para criar este objeto pra gente.<\/p>\n<p>Uma classe do tipo <em>Builder<\/em> \u00e9 parecida com uma classe do tipo <em>Factory<\/em>, pois ela ajuda a instanciar uma outra classe pra gente. A diferen\u00e7a sutil \u00e9 que queremos passar um monte de vari\u00e1veis e par\u00e2metros primeiro, ent\u00e3o quando tivermos o novo objeto, ele j\u00e1 vai estar pronto pra gente usar.<\/p>\n<h3>Filtrando<\/h3>\n<p>O m\u00e9todo <code>addFilter<\/code> no <code>SearchCriteriaBuilder<\/code> \u00e9 usado para filtrar os produtos que queremos. No nosso caso, queremos filtrar baseado no campo peso (<em>weight<\/em>), usando um valor maior ou igual a 10kg (ou lbs caso seu Magento esteja configurado assim).<\/p>\n<p>No m\u00e9todo <code>getProducts<\/code> vamos adicionar o filtro:<br \/>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-title=\"\">$this-&gt;searchCriteriaBuilder-&gt;addFilter(&#039;weight&#039;, 10.0, &#039;gteq&#039;);<\/pre><\/p>\n<h3>Ordena\u00e7\u00e3o no SearchCriteriaBuilder<\/h3>\n<p>Para ordenar nossa cole\u00e7\u00e3o, usaremos o m\u00e9todo <code>addSortOrder<\/code> no <code>SearchCriteriaBuilder<\/code>, passando um objeto do tipo <code>SortOrder<\/code>. Para isso precisaremos de outro <em>builder<\/em>.<\/p>\n<p>Vamos ordenar os produtos do mais pesado para o mais leve:<br \/>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-title=\"\">$sortOrder = $this-&gt;sortOrderBuilder\n    -&gt;setField(&#039;weight&#039;)\n    -&gt;setDirection(SortOrder::SORT_DESC)\n    -&gt;create();\n    \n$this-&gt;searchCriteriaBuilder-&gt;addSortOrder($sortOrder);<\/pre><\/p>\n<h3>Limitando o Resultado<\/h3>\n<p>Se quisermos limitar o tamanho da cole\u00e7\u00e3o de produtos que estamos carregando, podemos usar o m\u00e9todo <code>setPageSize<\/code> e <code>setCurrentPage<\/code>. Isto tamb\u00e9m \u00e9 \u00fatil para fazer pagina\u00e7\u00e3o.<\/p>\n<p>Vamos limitar apenas os 5 produtos mais pesados:<br \/>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-title=\"\">$this-&gt;searchCriteriaBuilder\n    -&gt;setPageSize(5)\n    -&gt;setCurrentPage(1);<\/pre><\/p>\n<h3>Criando o objeto<\/h3>\n<p>Agora tudo que precisamos fazer \u00e9 criar (<code>create<\/code>) o objeto <code>SearchCriteria<\/code>:<br \/>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-title=\"\">$searchCriteria = $this-&gt;searchCriteriaBuilder-&gt;create();<\/pre><br \/>\nAgora n\u00f3s temos um objeto do tipo <code>SearchCriteria<\/code> completo para usar.<\/p>\n<h2><\/h2>\n<h2>Usando o <em>Repository<\/em><\/h2>\n<p>Por fim, n\u00f3s podemos usar o reposit\u00f3rio que criamos. O m\u00e9todo <code>getList<\/code> retorna um objeto <code>ProductSearchResultsInterface<\/code>, que \u00e9 \u00fatil para pegar metadados do nosso resultado, como o <code>SearchCriteria<\/code> usado, ou o total de registros encontrados.<\/p>\n<p>N\u00f3s vamos usar o m\u00e9todo <code>getItems<\/code>, que retorna um <em>array<\/em> de produtos.<br \/>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-title=\"\">$products = $this-&gt;productRepository\n    -&gt;getList($searchCriteria)\n    -&gt;getItems();<\/pre><\/p>\n<h2>Juntando tudo<\/h2>\n<p>Abaixo voc\u00ea encontra a classe completa. Espero que ela mostre o qu\u00e3o f\u00e1cil \u00e9 utilizar os reposit\u00f3rios do Magento 2. Por favor, deixe seu coment\u00e1rio abaixo caso encontre qualquer inconsist\u00eancia no artigo ou se houver algo que poderia ter sido mais claro. (Ou aproveite para discutir e se aprofundar mais no assunto, no grupo secreto de alunos do <a href=\"https:\/\/www.magenteiro.com\/magento2?utm_source=blog\">curso de Magento 2<\/a>)<\/p>\n<p>Divirta-se e carregue alguns produtos!<br \/>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-title=\"\">&lt;?php\n\nnamespace Magenteiro\\HeavyProducts\\Block;\n\nuse Magento\\Catalog\\Api\\Data\\ProductInterface;\nuse Magento\\Catalog\\Api\\ProductRepositoryInterface;\nuse Magento\\Framework\\Api\\SearchCriteriaBuilder;\nuse Magento\\Framework\\Api\\SortOrder;\nuse Magento\\Framework\\Api\\SortOrderBuilder;\nuse Magento\\Framework\\View\\Element\\Template;\nuse Magento\\Framework\\View\\Element\\Template\\Context;\n\nclass ListProduct extends Template\n{\n\n    \/**\n     * Product repository\n     * @var ProductRepositoryInterface\n     *\/\n    private $productRepository;\n\n    \/**\n     * SearchCriteria builder\n     * @var SearchCriteriaBuilder\n     *\/\n    private $searchCriteriaBuilder;\n\n    \/**\n     * SortOrder builder\n     * @var SortOrderBuilder\n     *\/\n    private $sortOrderBuilder;\n\n    \/**\n     * ListProduct constructor\n     *\n     * @param ProductRepositoryInterface $productRepository\n     * @param SearchCriteriaBuilder $searchCriteriaBuilder\n     * @param SortOrderBuilder $sortOrderBuilder\n     * @param Context $context\n     * @param array $data\n     *\/\n    public function __construct(\n        ProductRepositoryInterface $productRepository,\n        SearchCriteriaBuilder $searchCriteriaBuilder,\n        SortOrderBuilder $sortOrderBuilder,\n        Context $context,\n        array $data = []\n    ) {\n        parent::__construct($context, $data);\n        $this-&gt;productRepository = $productRepository;\n        $this-&gt;searchCriteriaBuilder = $searchCriteriaBuilder;\n        $this-&gt;sortOrderBuilder = $sortOrderBuilder;\n    }\n\n    \/**\n     * Get list of the 5 heaviest products\n     *\n     * @return ProductInterface[]\n     *\/\n    public function getProducts()\n    {\n        \/\/ Filter products weighing 10kg or more\n        $this-&gt;searchCriteriaBuilder\n            -&gt;addFilter(&#039;weight&#039;, 10.0, &#039;gteq&#039;);\n\n        \/\/ Sort products heaviest to lightest\n        $sortOrder = $this-&gt;sortOrderBuilder\n            -&gt;setField(&#039;weight&#039;)\n            -&gt;setDirection(SortOrder::SORT_DESC)\n            -&gt;create();\n        $this-&gt;searchCriteriaBuilder-&gt;addSortOrder($sortOrder);\n\n        \/\/ Get the first 5 products\n        $this-&gt;searchCriteriaBuilder\n            -&gt;setPageSize(5)\n            -&gt;setCurrentPage(1);\n\n        \/\/ Create the SearchCriteria\n        $searchCriteria = $this-&gt;searchCriteriaBuilder-&gt;create();\n\n        \/\/ Load the products\n        $products = $this-&gt;productRepository\n            -&gt;getList($searchCriteria)\n            -&gt;getItems();\n\n        return $products;\n    }\n\n}<\/pre><br \/>\n<em>Este artigo foi escrito originalmente por <a href=\"https:\/\/medium.com\/@dannynimmo?source=post_page-----4914caa67eaa--------------------------------\" target=\"_blank\" rel=\"noopener\">Danny Nimmo<\/a> e traduzido por mim (Ricardo Martins) com algumas modifica\u00e7\u00f5es e com pr\u00e9via autoriza\u00e7\u00e3o do autor. Confira o artigo original (em Ingl\u00eas) <a href=\"https:\/\/medium.com\/@dannynimmo\/how-to-use-the-repository-pattern-in-magento-2-4914caa67eaa\" target=\"_blank\" rel=\"noopener\">aqui<\/a>.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"A melhor forma de carregar entidades no Magento 2 \u00e9 atrav\u00e9s do uso de Repository. Neste tutorial veremos como o [&hellip;]","protected":false},"author":1,"featured_media":1143,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[27,25],"tags":[28,41,60,68],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v19.0 (Yoast SEO v19.4) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Como usar o Repository Pattern no Magento 2<\/title>\n<meta name=\"description\" content=\"Veja como usar o Repository Pattern do Magento 2 para filtrar cole\u00e7\u00f5es de produtos e outras entidades. Veja como ordenar, filtrar e paginar resultados.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.magenteiro.com\/blog\/magento-2\/como-usar-o-repository-pattern-no-magento-2\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Como usar o Repository Pattern no Magento 2\" \/>\n<meta property=\"og:description\" content=\"Veja como usar o Repository Pattern do Magento 2 para filtrar cole\u00e7\u00f5es de produtos e outras entidades. Veja como ordenar, filtrar e paginar resultados.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.magenteiro.com\/blog\/magento-2\/como-usar-o-repository-pattern-no-magento-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Magenteiro | V\u00eddeos, Artigos, e Cursos Magento 2 e Magento 1\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/facebook.com\/magenteiro\" \/>\n<meta property=\"article:published_time\" content=\"2018-11-27T04:00:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-08-25T00:05:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2018\/11\/repository-pattern.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"900\" \/>\n\t<meta property=\"og:image:height\" content=\"450\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Ricardo Martins\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@magenteiro\" \/>\n<meta name=\"twitter:site\" content=\"@magenteiro\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ricardo Martins\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#organization\",\"name\":\"Magenteiro\",\"url\":\"https:\/\/www.magenteiro.com\/blog\/\",\"sameAs\":[\"https:\/\/www.instagram.com\/magenteiro\",\"https:\/\/www.linkedin.com\/company\/magenteiro\",\"https:\/\/www.youtube.com\/magenteiro\",\"https:\/\/facebook.com\/magenteiro\",\"https:\/\/twitter.com\/magenteiro\"],\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2017\/04\/logo-white.png\",\"contentUrl\":\"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2017\/04\/logo-white.png\",\"width\":787,\"height\":149,\"caption\":\"Magenteiro\"},\"image\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#website\",\"url\":\"https:\/\/www.magenteiro.com\/blog\/\",\"name\":\"Magenteiro | V\u00eddeos, Artigos, e Cursos Magento 2 e Magento 1\",\"description\":\"Artigos t\u00e9cnicos, tutoriais e muitos v\u00eddeos e cursos sobre Magento. Aqui voc\u00ea encontra dicas para lojistas e desenvolvedores feitos por quem entende do assunto.\",\"publisher\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.magenteiro.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/magento-2\/como-usar-o-repository-pattern-no-magento-2\/\",\"url\":\"https:\/\/www.magenteiro.com\/blog\/magento-2\/como-usar-o-repository-pattern-no-magento-2\/\",\"name\":\"Como usar o Repository Pattern no Magento 2\",\"isPartOf\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#website\"},\"datePublished\":\"2018-11-27T04:00:13+00:00\",\"dateModified\":\"2022-08-25T00:05:02+00:00\",\"description\":\"Veja como usar o Repository Pattern do Magento 2 para filtrar cole\u00e7\u00f5es de produtos e outras entidades. Veja como ordenar, filtrar e paginar resultados.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/magento-2\/como-usar-o-repository-pattern-no-magento-2\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.magenteiro.com\/blog\/magento-2\/como-usar-o-repository-pattern-no-magento-2\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/magento-2\/como-usar-o-repository-pattern-no-magento-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.magenteiro.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Como usar o Repository Pattern no Magento 2\"}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/magento-2\/como-usar-o-repository-pattern-no-magento-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/magento-2\/como-usar-o-repository-pattern-no-magento-2\/\"},\"author\":{\"name\":\"Ricardo Martins\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#\/schema\/person\/e90c4bb268e5f2dad10d7c9760d4f150\"},\"headline\":\"Como usar o Repository Pattern no Magento 2\",\"datePublished\":\"2018-11-27T04:00:13+00:00\",\"dateModified\":\"2022-08-25T00:05:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/magento-2\/como-usar-o-repository-pattern-no-magento-2\/\"},\"wordCount\":891,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#organization\"},\"keywords\":[\"dependency injection\",\"Magento 2\",\"Tutoriais Magento\",\"tutorial\"],\"articleSection\":[\"Desenvolvimento\",\"Magento 2\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.magenteiro.com\/blog\/magento-2\/como-usar-o-repository-pattern-no-magento-2\/#respond\"]}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#\/schema\/person\/e90c4bb268e5f2dad10d7c9760d4f150\",\"name\":\"Ricardo Martins\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.magenteiro.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ae5800c87c4e0f6a4a6b7a3d66aae138?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ae5800c87c4e0f6a4a6b7a3d66aae138?s=96&d=mm&r=g\",\"caption\":\"Ricardo Martins\"},\"description\":\"\u00c9 desenvolvedor web h\u00e1 16 anos e um dos primeiros certificados pela Magento no Brasil. Instrutor de mais de 11 cursos Magento (os principais no magenteiro.com\/cursos) com mais de 14 mil alunos de 105 pa\u00edses, \u00e9 tamb\u00e9m criador do m\u00f3dulo PagSeguro Transparente, usado em mais de 12 mil lojas.\",\"sameAs\":[\"https:\/\/www.magenteiro.com\/\"],\"url\":\"https:\/\/www.magenteiro.com\/blog\/author\/ricardomartins\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Como usar o Repository Pattern no Magento 2","description":"Veja como usar o Repository Pattern do Magento 2 para filtrar cole\u00e7\u00f5es de produtos e outras entidades. Veja como ordenar, filtrar e paginar resultados.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.magenteiro.com\/blog\/magento-2\/como-usar-o-repository-pattern-no-magento-2\/","og_locale":"pt_BR","og_type":"article","og_title":"Como usar o Repository Pattern no Magento 2","og_description":"Veja como usar o Repository Pattern do Magento 2 para filtrar cole\u00e7\u00f5es de produtos e outras entidades. Veja como ordenar, filtrar e paginar resultados.","og_url":"https:\/\/www.magenteiro.com\/blog\/magento-2\/como-usar-o-repository-pattern-no-magento-2\/","og_site_name":"Magenteiro | V\u00eddeos, Artigos, e Cursos Magento 2 e Magento 1","article_publisher":"https:\/\/facebook.com\/magenteiro","article_published_time":"2018-11-27T04:00:13+00:00","article_modified_time":"2022-08-25T00:05:02+00:00","og_image":[{"width":900,"height":450,"url":"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2018\/11\/repository-pattern.jpg","type":"image\/jpeg"}],"author":"Ricardo Martins","twitter_card":"summary_large_image","twitter_creator":"@magenteiro","twitter_site":"@magenteiro","twitter_misc":{"Written by":"Ricardo Martins","Est. reading time":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Organization","@id":"https:\/\/www.magenteiro.com\/blog\/#organization","name":"Magenteiro","url":"https:\/\/www.magenteiro.com\/blog\/","sameAs":["https:\/\/www.instagram.com\/magenteiro","https:\/\/www.linkedin.com\/company\/magenteiro","https:\/\/www.youtube.com\/magenteiro","https:\/\/facebook.com\/magenteiro","https:\/\/twitter.com\/magenteiro"],"logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.magenteiro.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2017\/04\/logo-white.png","contentUrl":"https:\/\/www.magenteiro.com\/blog\/wp-content\/uploads\/2017\/04\/logo-white.png","width":787,"height":149,"caption":"Magenteiro"},"image":{"@id":"https:\/\/www.magenteiro.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"WebSite","@id":"https:\/\/www.magenteiro.com\/blog\/#website","url":"https:\/\/www.magenteiro.com\/blog\/","name":"Magenteiro | V\u00eddeos, Artigos, e Cursos Magento 2 e Magento 1","description":"Artigos t\u00e9cnicos, tutoriais e muitos v\u00eddeos e cursos sobre Magento. Aqui voc\u00ea encontra dicas para lojistas e desenvolvedores feitos por quem entende do assunto.","publisher":{"@id":"https:\/\/www.magenteiro.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.magenteiro.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/www.magenteiro.com\/blog\/magento-2\/como-usar-o-repository-pattern-no-magento-2\/","url":"https:\/\/www.magenteiro.com\/blog\/magento-2\/como-usar-o-repository-pattern-no-magento-2\/","name":"Como usar o Repository Pattern no Magento 2","isPartOf":{"@id":"https:\/\/www.magenteiro.com\/blog\/#website"},"datePublished":"2018-11-27T04:00:13+00:00","dateModified":"2022-08-25T00:05:02+00:00","description":"Veja como usar o Repository Pattern do Magento 2 para filtrar cole\u00e7\u00f5es de produtos e outras entidades. Veja como ordenar, filtrar e paginar resultados.","breadcrumb":{"@id":"https:\/\/www.magenteiro.com\/blog\/magento-2\/como-usar-o-repository-pattern-no-magento-2\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.magenteiro.com\/blog\/magento-2\/como-usar-o-repository-pattern-no-magento-2\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.magenteiro.com\/blog\/magento-2\/como-usar-o-repository-pattern-no-magento-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.magenteiro.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Como usar o Repository Pattern no Magento 2"}]},{"@type":"Article","@id":"https:\/\/www.magenteiro.com\/blog\/magento-2\/como-usar-o-repository-pattern-no-magento-2\/#article","isPartOf":{"@id":"https:\/\/www.magenteiro.com\/blog\/magento-2\/como-usar-o-repository-pattern-no-magento-2\/"},"author":{"name":"Ricardo Martins","@id":"https:\/\/www.magenteiro.com\/blog\/#\/schema\/person\/e90c4bb268e5f2dad10d7c9760d4f150"},"headline":"Como usar o Repository Pattern no Magento 2","datePublished":"2018-11-27T04:00:13+00:00","dateModified":"2022-08-25T00:05:02+00:00","mainEntityOfPage":{"@id":"https:\/\/www.magenteiro.com\/blog\/magento-2\/como-usar-o-repository-pattern-no-magento-2\/"},"wordCount":891,"commentCount":0,"publisher":{"@id":"https:\/\/www.magenteiro.com\/blog\/#organization"},"keywords":["dependency injection","Magento 2","Tutoriais Magento","tutorial"],"articleSection":["Desenvolvimento","Magento 2"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.magenteiro.com\/blog\/magento-2\/como-usar-o-repository-pattern-no-magento-2\/#respond"]}]},{"@type":"Person","@id":"https:\/\/www.magenteiro.com\/blog\/#\/schema\/person\/e90c4bb268e5f2dad10d7c9760d4f150","name":"Ricardo Martins","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.magenteiro.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ae5800c87c4e0f6a4a6b7a3d66aae138?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ae5800c87c4e0f6a4a6b7a3d66aae138?s=96&d=mm&r=g","caption":"Ricardo Martins"},"description":"\u00c9 desenvolvedor web h\u00e1 16 anos e um dos primeiros certificados pela Magento no Brasil. Instrutor de mais de 11 cursos Magento (os principais no magenteiro.com\/cursos) com mais de 14 mil alunos de 105 pa\u00edses, \u00e9 tamb\u00e9m criador do m\u00f3dulo PagSeguro Transparente, usado em mais de 12 mil lojas.","sameAs":["https:\/\/www.magenteiro.com\/"],"url":"https:\/\/www.magenteiro.com\/blog\/author\/ricardomartins\/"}]}},"_links":{"self":[{"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/posts\/1140"}],"collection":[{"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/comments?post=1140"}],"version-history":[{"count":4,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/posts\/1140\/revisions"}],"predecessor-version":[{"id":3840,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/posts\/1140\/revisions\/3840"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/media\/1143"}],"wp:attachment":[{"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/media?parent=1140"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/categories?post=1140"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.magenteiro.com\/blog\/wp-json\/wp\/v2\/tags?post=1140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}