{"id":4111,"date":"2018-05-17T12:21:37","date_gmt":"2018-05-17T15:21:37","guid":{"rendered":"http:\/\/blog.dialhost.com.br\/?p=4111"},"modified":"2018-05-17T12:21:37","modified_gmt":"2018-05-17T15:21:37","slug":"dados-relacionados-api-resource-laravel","status":"publish","type":"post","link":"https:\/\/www.dialhost.com.br\/blog\/dados-relacionados-api-resource-laravel\/","title":{"rendered":"Adicionando dados relacionados na API resource do Laravel"},"content":{"rendered":"\n\t\t\t\t\n<p>A API resource do Laravel facilitou bastante a comunica\u00e7\u00e3o RESTfull com outras plataformas. Como explicado no \u00faltimo artigo (<a href=\"http:\/\/blog.dialhost.com.br\/desenvolvimento-2\/api-resources-do-laravel-criando-repostas-restfull\/\">API resources do Laravel, criando repostas RESTfull<\/a>), onde iniciei sobre este tema, este recurso cria uma camada de transforma\u00e7\u00e3o dos dados para trabalhar com JSON. Agora vou dar foco no relacionamento de dados, que n\u00e3o foi contemplado no \u00faltimo artigo.<\/p>\n\n\n\n<h2>Relacionamentos com API resource<\/h2>\n\n\n\n<p>Sempre que quisermos adicionar recursos relacionados de uma tabela, podemos retornar estes dados fazendo uma requisi\u00e7\u00e3o no outro resource relacionado. Vamos ao nosso exemplo. Tenho a tabela product_line que possui diversos produtos. Para eu retornar todos os dados deste product_line e todos os produtos que pertencem a ele, basta eu adicionar a Collection de products em um atributo &#8216;products&#8217; dentro do array.<\/p>\n\n\n<p>[php]&lt;?php<\/p>\n<p>class ProductLineResource extends JsonResource<br \/>\n{<br \/>\npublic function toArray($request)<br \/>\n{<br \/>\nreturn [<br \/>\n&#8216;id&#8217; =&gt; $this-&gt;id,<br \/>\n&#8216;description&#8217; =&gt; $this-&gt;description,<br \/>\n&#8216;products&#8217; =&gt; ProductResource::collection($this-&gt;products),<br \/>\n&#8216;created_at&#8217; =&gt; $this-&gt;created_at,<br \/>\n&#8216;updated_at&#8217; =&gt; $this-&gt;updated_at,<br \/>\n];<br \/>\n}<br \/>\n}<\/p>\n<p>[\/php]<\/p>\n\n\n\n<p>Aqui&#8230; se o seu relacionamento est\u00e1 certinho<a href=\"http:\/\/blog.dialhost.com.br\/desenvolvimento-2\/eloquent-simplificando-models-laravel\/\">&nbsp;na model<\/a> a consulta j\u00e1 vai buscar os produtos relacionados a est\u00e1 linha de produtos. E retornar uma collection dentro do atributo <strong>&#8216;products&#8217;<\/strong><\/p>\n\n\n\n<h2>Exibi\u00e7\u00e3o Condicional<\/h2>\n\n\n\n<p>Al\u00e9m de trazer os relacionamentos tamb\u00e9m \u00e9 poss\u00edvel ter o controle da resposta trazendo o dado relacionado apenas se ele j\u00e1 tiver sido carregado na model. Atrav\u00e9s da fun\u00e7\u00e3o whenLoaded podemos carregar apenas o relacionamento que queremos atrav\u00e9s do nome deste relacionamento. Assim, evita-se que sejam carregados relacionamentos desnecess\u00e1rios para o resource.<\/p>\n\n\n\n<p>Agora vamos ao exemplo. Abaixo vamos trocar o relacionamento do <strong>$this-&gt;products<\/strong> para a fun\u00e7\u00e3o&nbsp;<strong>$this-&gt;whenLoaded(&#8216;products&#8217;)&nbsp;<\/strong>para controlar o carregamento deste relacionamento<\/p>\n\n\n<p>[php]&lt;?php<\/p>\n<p>class ProductLineResource extends JsonResource<br \/>\n{<br \/>\npublic function toArray($request)<br \/>\n{<br \/>\nreturn [<br \/>\n&#8216;id&#8217; =&gt; $this-&gt;id,<br \/>\n&#8216;description&#8217; =&gt; $this-&gt;description,<br \/>\n&#8216;products&#8217; =&gt; ProductResource::collection($this-&gt;whenLoaded(&#8216;products&#8217;)),<br \/>\n&#8216;created_at&#8217; =&gt; $this-&gt;created_at,<br \/>\n&#8216;updated_at&#8217; =&gt; $this-&gt;updated_at,<br \/>\n];<br \/>\n}<br \/>\n}<br \/>\n[\/php]<\/p>\n\n\n\n<p>No exemplo abaixo, se n\u00e3o for poss\u00edvel carregar o relacionamento do products o item ser\u00e1 removido do resource.<\/p>\n\n\n\n<h2>Conclus\u00e3o<\/h2>\n\n\n\n<p>N\u00e3o existem segredos para a utiliza\u00e7\u00e3o dos relacionamentos dentro do API resource, na verdade todo o trabalho est\u00e1 por tr\u00e1s no Eloquent e na Model. Estando tudo certo por tr\u00e1s relacionar no API resource fica extremamente simples e natural. Para quem quiser se aprofundar mais nesta funcionalidade aconselho darem uma lida na <a href=\"https:\/\/laravel.com\/docs\/5.6\/eloquent-resources\" target=\"_blank\" rel=\"noreferrer noopener\">documenta\u00e7\u00e3o oficial<\/a>.<\/p>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\t\t\t\tEste recurso cria uma camada de transforma\u00e7\u00e3o dos dados para trabalhar com JSON. Agora vou dar foco no relacionamento de dados, que n\u00e3o foi contemplado no \u00faltimo artigo\t\t\t\t<\/p>\n","protected":false},"author":1,"featured_media":7588,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[23,24,12],"tags":[76,138,140],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v15.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Adicionando dados relacionados na API resource do Laravel - Blog DialHost<\/title>\n<meta name=\"description\" content=\"Veja como trabalhar com o &quot;API resource&quot; no Laravel para retornar dados em JSON utilizando os relacionamentos das models.\" \/>\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.dialhost.com.br\/blog\/dados-relacionados-api-resource-laravel\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Adicionando dados relacionados na API resource do Laravel - Blog DialHost\" \/>\n<meta property=\"og:description\" content=\"Veja como trabalhar com o &quot;API resource&quot; no Laravel para retornar dados em JSON utilizando os relacionamentos das models.\" \/>\n<meta property=\"og:url\" content=\"\/blog\/dados-relacionados-api-resource-laravel\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog DialHost\" \/>\n<meta property=\"article:publisher\" content=\"http:\/\/www.facebook.com\/DialHost\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/DialHost\" \/>\n<meta property=\"article:published_time\" content=\"2018-05-17T15:21:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dialhost.com.br\/blog\/wp-content\/uploads\/2019\/04\/og-image.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@dialhost\" \/>\n<meta name=\"twitter:site\" content=\"@dialhost\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#organization\",\"name\":\"DialHost Internet\",\"url\":\"https:\/\/www.dialhost.com.br\/blog\/\",\"sameAs\":[\"http:\/\/www.facebook.com\/DialHost\",\"https:\/\/www.instagram.com\/dialhost_oficial\/\",\"https:\/\/www.linkedin.com\/company\/dialhost-internet\",\"https:\/\/www.youtube.com\/channel\/UCAiqiX8IiqTSfA8wQhpzgXQ\",\"https:\/\/twitter.com\/dialhost\"],\"logo\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#logo\",\"inLanguage\":\"pt-BR\",\"url\":\"https:\/\/www.dialhost.com.br\/blog\/wp-content\/uploads\/2019\/03\/marca-dialhost.png\",\"width\":81,\"height\":81,\"caption\":\"DialHost Internet\"},\"image\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#logo\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#website\",\"url\":\"https:\/\/www.dialhost.com.br\/blog\/\",\"name\":\"Blog DialHost\",\"description\":\"Os melhores conte\\u00fados sobre Desenvolvimento Web, Marketing e Neg\\u00f3cios\",\"publisher\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/www.dialhost.com.br\/blog\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/dados-relacionados-api-resource-laravel\/#primaryimage\",\"inLanguage\":\"pt-BR\",\"url\":\"https:\/\/www.dialhost.com.br\/blog\/wp-content\/uploads\/2018\/05\/api-resources-laravel.jpg\",\"width\":1400,\"height\":520,\"caption\":\"\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/dados-relacionados-api-resource-laravel\/#webpage\",\"url\":\"https:\/\/www.dialhost.com.br\/blog\/dados-relacionados-api-resource-laravel\/\",\"name\":\"Adicionando dados relacionados na API resource do Laravel - Blog DialHost\",\"isPartOf\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/dados-relacionados-api-resource-laravel\/#primaryimage\"},\"datePublished\":\"2018-05-17T15:21:37+00:00\",\"dateModified\":\"2018-05-17T15:21:37+00:00\",\"description\":\"Veja como trabalhar com o \\\"API resource\\\" no Laravel para retornar dados em JSON utilizando os relacionamentos das models.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/dados-relacionados-api-resource-laravel\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dialhost.com.br\/blog\/dados-relacionados-api-resource-laravel\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/dados-relacionados-api-resource-laravel\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"\/blog\/\",\"url\":\"\/blog\/\",\"name\":\"In\\u00edcio\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"\/blog\/dados-relacionados-api-resource-laravel\/\",\"url\":\"\/blog\/dados-relacionados-api-resource-laravel\/\",\"name\":\"Adicionando dados relacionados na API resource do Laravel\"}}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/dados-relacionados-api-resource-laravel\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/dados-relacionados-api-resource-laravel\/#webpage\"},\"author\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#\/schema\/person\/a0b10cbe35449dea173a06d4664f9fcc\"},\"headline\":\"Adicionando dados relacionados na API resource do Laravel\",\"datePublished\":\"2018-05-17T15:21:37+00:00\",\"dateModified\":\"2018-05-17T15:21:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/dados-relacionados-api-resource-laravel\/#webpage\"},\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/dados-relacionados-api-resource-laravel\/#primaryimage\"},\"keywords\":\"desenvolvimento,laravel,laravel5.5\",\"articleSection\":\"Laravel,PHP,Tecnologias\",\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dialhost.com.br\/blog\/dados-relacionados-api-resource-laravel\/#respond\"]}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#\/schema\/person\/a0b10cbe35449dea173a06d4664f9fcc\",\"name\":\"DialHost Internet\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#personlogo\",\"inLanguage\":\"pt-BR\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/05feec2f99aef1c42b09aeaa637ee66f?s=96&r=g\",\"caption\":\"DialHost Internet\"},\"description\":\"H\\u00e1 mais de 18 anos proporcionando um servi\\u00e7o de hospedagem de sites voltado 100% na Experi\\u00eancia e Sucesso do Cliente, prezando a qualidade, transpar\\u00eancia e seguran\\u00e7a.\",\"sameAs\":[\"https:\/\/www.facebook.com\/DialHost\",\"https:\/\/www.instagram.com\/dialhost_oficial\/\",\"https:\/\/www.linkedin.com\/company\/dialhost-internet\",\"https:\/\/twitter.com\/dialhost\",\"https:\/\/www.youtube.com\/channel\/UCAiqiX8IiqTSfA8wQhpzgXQ\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/posts\/4111"}],"collection":[{"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/comments?post=4111"}],"version-history":[{"count":0,"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/posts\/4111\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/media\/7588"}],"wp:attachment":[{"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/media?parent=4111"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/categories?post=4111"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/tags?post=4111"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}