{"id":66854,"date":"2024-02-08T15:37:33","date_gmt":"2024-02-08T18:37:33","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=66854&#038;preview=true&#038;preview_id=66854"},"modified":"2024-05-14T11:18:05","modified_gmt":"2024-05-14T14:18:05","slug":"laravel-eloquent","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/","title":{"rendered":"Seis Coisas que Voc\u00ea Precisa Saber para Dominar o Laravel Eloquent"},"content":{"rendered":"<p><a href=\"https:\/\/kinsta.com\/pt\/topicos\/laravel\/\">Laravel<\/a> \u00e9 um <a href=\"https:\/\/kinsta.com\/pt\/blog\/frameworks-php-populares\/\">framework PHP<\/a> de c\u00f3digo aberto e f\u00e1cil de usar. Um de seus recursos mais avan\u00e7ados \u00e9 o Eloquent, um mapeador de objeto-relacional (ORM) que simplifica o manuseio de registros do banco de dados.<\/p>\n<p>O Eloquent acelera as opera\u00e7\u00f5es de cria\u00e7\u00e3o, leitura, atualiza\u00e7\u00e3o e exclus\u00e3o em um banco de dados a partir de um aplicativo. Ao usar o Eloquent, voc\u00ea cria modelos que espelham as tabelas do banco de dados e usa esses modelos para criar suas consultas.<\/p>\n<p>Este artigo examina seis elementos da funcionalidade mais potente do Eloquent: escopos de consulta, relacionamentos, mutadores e acessores, cole\u00e7\u00f5es, exclus\u00e3o de modelos e f\u00e1bricas. Ele aborda o que cada recurso faz usando exemplos pr\u00e1ticos. Esperamos que voc\u00ea possa usar esses exemplos para iniciar seu dom\u00ednio do <a href=\"https:\/\/laravel.com\/docs\/10.x\/eloquent\" target=\"_blank\" rel=\"noopener noreferrer\">Laravel Eloquent<\/a>.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>1. Escopos de consulta do Eloquent<\/h2>\n<p>Ao criar um aplicativo, \u00e0s vezes voc\u00ea se depara com situa\u00e7\u00f5es em que usa condi\u00e7\u00f5es mais de uma vez. Reescrever o c\u00f3digo em cada caso pode aumentar a chance de erros e deixar seu c\u00f3digo desorganizado. O Laravel resolve esse problema ao encapsular essas condi\u00e7\u00f5es em declara\u00e7\u00f5es reutiliz\u00e1veis chamadas escopos.<\/p>\n<p>Os escopos de consulta s\u00e3o m\u00e9todos para adicionar l\u00f3gica do banco de dados a um modelo e reutilizar a l\u00f3gica de consulta.<\/p>\n<p>A seguir, voc\u00ea ver\u00e1 um exemplo de escopo de consulta. Suponha que voc\u00ea queira criar uma plataforma de desenvolvimento de software para sua equipe que rastreie recursos conclu\u00eddos e em andamento. Voc\u00ea pode usar essa condi\u00e7\u00e3o para recuperar apenas os recursos em andamento:<\/p>\n<pre><code class=\"language-php\">$onGoing = Project::where('ongoing', 1)-&gt;get();<\/code><\/pre>\n<p>Voc\u00ea pode precisar dessa condi\u00e7\u00e3o em outras p\u00e1ginas do aplicativo, como a p\u00e1gina de estat\u00edsticas. Os escopos de consulta permitem que uma p\u00e1gina reutilize a condi\u00e7\u00e3o acima, simplificando sua consulta e tornando seu c\u00f3digo mais limpo.<\/p>\n<p>Veja como voc\u00ea pode usar um escopo de consulta para esse cen\u00e1rio:<\/p>\n<pre><code class=\"language-php\">class Features extends Model\n{\n    public function scopeOngoing($query)\n    {\n        return $query-&gt;where('ongoing', 0);\n    }\n}<\/code><\/pre>\n<p>Em seguida, use o c\u00f3digo abaixo para executar esse escopo:<\/p>\n<pre><code class=\"language-php\">$onGoing = Feature::ongoing()-&gt;get();<\/code><\/pre>\n<p>H\u00e1 dois tipos de escopos: global e local.<\/p>\n<h3>Escopos globais<\/h3>\n<p>Os escopos globais permitem a adi\u00e7\u00e3o de restri\u00e7\u00f5es a todas as consultas em um modelo. Por exemplo, voc\u00ea pode adicionar uma condi\u00e7\u00e3o para filtrar recursos com base no nome do l\u00edder da equipe em todas as consultas do seu modelo.<\/p>\n<h3>Escopos locais<\/h3>\n<p>Os escopos locais permitem a defini\u00e7\u00e3o de restri\u00e7\u00f5es comuns para reutiliza\u00e7\u00e3o. Por exemplo, voc\u00ea pode querer que o aplicativo retorne os recursos que t\u00eam bugs. Seu c\u00f3digo pode implementar um escopo local como este:<\/p>\n<pre><code class=\"language-php\">namespace AppModels;\nuse IlluminateDatabaseEloquentModel;\n\nclass User extends Model\n{\n    public function scopeBugged($query)\n    {\n        return $query-&gt;where('bugged', '&gt;', 1);\n    }\n}<\/code><\/pre>\n<p>O c\u00f3digo acima retorna todos os recursos que t\u00eam bugs n\u00e3o corrigidos.<\/p>\n<h2>2. Relacionamentos do Eloquent<\/h2>\n<p>Os relacionamentos no Eloquent permitem que voc\u00ea relacione facilmente diferentes tabelas. Por exemplo, um produto em um site de eCommerce pode ter invent\u00e1rio, pre\u00e7o, visualiza\u00e7\u00f5es e avalia\u00e7\u00f5es listados. Com o Eloquent, voc\u00ea pode gerenciar facilmente esses relacionamentos, mesmo quando os registros est\u00e3o em tabelas diferentes.<\/p>\n<p>Voc\u00ea pode definir relacionamentos como m\u00e9todos em classes de modelo, da mesma forma que faria com um modelo do Eloquent. Alguns relacionamentos do Eloquent comumente usados incluem um para um, inverso e polim\u00f3rfico.<\/p>\n<h3>Um para um<\/h3>\n<p>Aqui est\u00e1 um exemplo de um relacionamento b\u00e1sico de um para um que associa um modelo de produto a um invent\u00e1rio.<\/p>\n<pre><code class=\"language-php\">public function Inventory()\n{\n    return $this-&gt;hasOne('AppInventory');\n}<\/code><\/pre>\n<p>No c\u00f3digo acima, o m\u00e9todo <code>Inventory()<\/code> chama o m\u00e9todo <code>hasOne()<\/code> no modelo de produto. Isso verifica se o produto est\u00e1 dispon\u00edvel no momento.<\/p>\n<h3>Inverso<\/h3>\n<p>O Eloquent tamb\u00e9m permite que voc\u00ea crie uma rela\u00e7\u00e3o inversa. Por exemplo, quando voc\u00ea deseja buscar produtos com base em sua contagem de visualiza\u00e7\u00f5es. As rela\u00e7\u00f5es inversas podem fornecer a voc\u00ea os produtos que despertam mais interesse dos visitantes de um site. Voc\u00ea pode usar o m\u00e9todo <code>belongsTo()<\/code>, que \u00e9 o inverso de <code>hasOne()<\/code>. O c\u00f3digo abaixo ilustra isso.<\/p>\n<pre><code class=\"language-php\">public function product()\n{\n    return $this-&gt;belongsTo('AppProduct');\n}<\/code><\/pre>\n<p>No c\u00f3digo acima, o Eloquent faz a correspond\u00eancia entre o <code>product_id<\/code> e o n\u00famero de visualiza\u00e7\u00f5es passadas. O <code>product_id<\/code> pode, ent\u00e3o, ajudar voc\u00ea a buscar outros par\u00e2metros, como pre\u00e7o e estoque.<\/p>\n<h3>Polim\u00f3rfico<\/h3>\n<p>No desenvolvimento de aplicativos, as rela\u00e7\u00f5es nem sempre s\u00e3o simples. \u00c0s vezes, voc\u00ea tem um modelo que pertence a mais de um tipo de modelo. Por exemplo, os modelos de produto e estoque podem ter relacionamentos polim\u00f3rficos com um modelo de imagem.<\/p>\n<p>Os <a href=\"https:\/\/kinsta.com\/pt\/blog\/relacoes-eloquent-laravel\/#polymorphic-relationships\">relacionamentos polim\u00f3rficos<\/a> permitiriam que voc\u00ea usasse a mesma lista de imagens para o invent\u00e1rio e para os produtos. Abaixo est\u00e1 um trecho de c\u00f3digo que implementa um relacionamento polim\u00f3rfico.<\/p>\n<pre><code class=\"language-php\">class Image extends Model\n{\n    \/**\n     * Getting the shared image.\n     *\/\n    public function myimage()\n    {\n        return $this-&gt;morphTo();\n    }\n}\n\nclass Product extends Model\n{\n    \/**\n     * Get the image to use on the product's page.\n     *\/\n    public function image()\n    {\n        return $this-&gt;morphOne(Image::class, 'myimage');\n    }\n}\n\nclass Inventory extends Model\n{\n    \/**\n     * Get the image to use on the inventory page.\n     *\/\n    public function image()\n    {\n        return $this-&gt;morphOne(Image::class, 'myimage');\n    }\n}<\/code><\/pre>\n<p>O c\u00f3digo acima usa o m\u00e9todo <code>morphTo()<\/code> para recuperar o modelo polim\u00f3rfico principal.<\/p>\n<p>Essa \u00e9 apenas a ponta do iceberg sobre esse t\u00f3pico. Para saber mais, consulte nosso guia avan\u00e7ado sobre <a href=\"https:\/\/kinsta.com\/pt\/blog\/relacoes-eloquent-laravel\/\">relacionamentos do Laravel Eloquent<\/a>.<\/p>\n<h2>3. Mutadores e acessores do Eloquent<\/h2>\n<p>Os mutadores e acessores permitem que voc\u00ea altere os dados enquanto os armazena e recupera. Os mutadores modificam os dados antes de salv\u00e1-los, enquanto os acessores modificam os dados enquanto os recuperam.<\/p>\n<p>Se voc\u00ea quiser armazenar nomes em letras min\u00fasculas no banco de dados, poder\u00e1 criar um mutador para executar essa transforma\u00e7\u00e3o. Se quiser exibir o nome e o sobrenome do usu\u00e1rio como um \u00fanico nome nas p\u00e1ginas do aplicativo, voc\u00ea pode criar um acessor para fazer isso.<\/p>\n<p>Abaixo voc\u00ea encontra um exemplo de um mutador que coloca os nomes em mai\u00fasculas antes de salv\u00e1-los.<\/p>\n<pre><code class=\"language-php\">class User extends Model\n{\n    \/**\n     * Mutators capitalizing first and last name.\n     *\/\n    public function setFirstNameAttribute($value)\n    {\n        $this-&gt;attributes['first_name'] = ucfirst($value);\n    }\n\n    public function setLastNameAttribute($value)\n    {\n        $this-&gt;attributes['last_name'] = ucfirst($value);\n    }\n}<\/code><\/pre>\n<p>Abaixo est\u00e1 um exemplo de um acess\u00f3rio que combina o nome e o sobrenome do usu\u00e1rio.<\/p>\n<pre><code class=\"language-php\">class User extends Model\n{\n    \/**\n     * Accessor combining both names.\n     *\/\n    public function getFullNameAttribute()\n    {\n        return ucfirst($this-&gt;first_name) . ' ' . ucfirst($this-&gt;last_name);\n    }\n}<\/code><\/pre>\n<h2>4. Cole\u00e7\u00f5es eloquentes<\/h2>\n<p>As cole\u00e7\u00f5es eloquentes lidam com m\u00e9todos que retornam v\u00e1rios resultados de modelos. Essa classe \u00e9 encontrada em <code>IlluminateDatabaseEloquentCollection<\/code>.<\/p>\n<p>Assim como ocorre com as arrays, \u00e9 poss\u00edvel iterar pelas cole\u00e7\u00f5es. A seguir, voc\u00ea ver\u00e1 uma itera\u00e7\u00e3o simples.<\/p>\n<pre><code class=\"language-php\">use AppModelsProduct;\n\n$products = Product::where('availability', 1)-&gt;get();\n\nforeach ($products as $product) {\n   echo $product-&gt;name;\n}<\/code><\/pre>\n<p>As cole\u00e7\u00f5es s\u00e3o mais eficientes do que as arrays porque voc\u00ea pode executar opera\u00e7\u00f5es mais complexas nelas. Por exemplo, voc\u00ea pode exibir a lista de todos os produtos dispon\u00edveis e ignorar todos os que n\u00e3o est\u00e3o &#8220;ativos&#8221;.<\/p>\n<pre><code class=\"language-php\">$names = Product::all()-&gt;reject(function ($product) {\n   return $product-&gt;active === false;\n})-&gt;map(function ($product) {\n   return $product-&gt;name;\n});<\/code><\/pre>\n<p>Abaixo est\u00e3o alguns dos m\u00e9todos que a classe de cole\u00e7\u00f5es oferece.<\/p>\n<h3>contains<\/h3>\n<p>O m\u00e9todo <code>contains()<\/code> verifica se o c\u00f3digo cont\u00e9m um modo especificado, conforme mostrado no c\u00f3digo abaixo:<\/p>\n<pre><code class=\"language-php\">$products-&gt;contains(1);\n$products-&gt;contains(Product::find(1));<\/code><\/pre>\n<h3>all<\/h3>\n<p>O m\u00e9todo <code>all()<\/code> retorna os modelos contidos na cole\u00e7\u00e3o, conforme mostrado abaixo:<\/p>\n<pre><code class=\"language-php\">$collection = Product::all();<\/code><\/pre>\n<p>Muitos outros m\u00e9todos s\u00e3o compat\u00edveis com a <a href=\"https:\/\/laravel.com\/docs\/9.x\/eloquent-collections\" target=\"blank\" rel=\"noopener\">classe de cole\u00e7\u00f5es<\/a>.<\/p>\n<h2>5. Exclua modelos do Eloquent<\/h2>\n<p>No Eloquent, voc\u00ea cria modelos para ajudar na cria\u00e7\u00e3o de consultas. No entanto, \u00e0s vezes voc\u00ea precisa excluir modelos para tornar um aplicativo mais eficiente. Para isso, voc\u00ea deve chamar <code>delete<\/code> na inst\u00e2ncia do modelo.<\/p>\n<pre><code class=\"language-php\">use AppModelsStock;\n\n$stock = Stock::find(1);\n$stock-&gt;delete();<\/code><\/pre>\n<p>O c\u00f3digo acima remove o modelo <code>Stock<\/code> de um aplicativo. Essa \u00e9 uma remo\u00e7\u00e3o permanente que n\u00e3o pode ser desfeita.<\/p>\n<h3>Exclus\u00e3o suave<\/h3>\n<p>Outro recurso que o Eloquent cont\u00e9m \u00e9 o recurso de exclus\u00e3o suave de modelos. Quando voc\u00ea realiza uma exclus\u00e3o suave de um modelo, voc\u00ea n\u00e3o o remove do banco de dados.<\/p>\n<p>Voc\u00ea marca o registro usando<code>deleted_at<\/code> para indicar a hora e a data da exclus\u00e3o suave. Isso \u00e9 importante quando voc\u00ea deseja excluir uma parte dos registros do banco de dados, como aqueles que est\u00e3o incompletos, sem remov\u00ea-los permanentemente. Isso ajuda a limpar os resultados da consulta do Eloquent sem adicionar condi\u00e7\u00f5es extras.<\/p>\n<p>Voc\u00ea ativa a exclus\u00e3o suave adicionando a caracter\u00edstica <code>softDeletes<\/code> a um modelo e adicionando uma coluna <code>deleted_at<\/code> na tabela de banco de dados relacionada.<\/p>\n<h3>Adi\u00e7\u00e3o de exclus\u00e3o tempor\u00e1ria a um modelo<\/h3>\n<p>Voc\u00ea ativa as exclus\u00f5es suaves do modelo adicionando a caracter\u00edstica <code>IlluminateDatabaseEloquentSoftDeletes<\/code>, conforme mostrado abaixo.<\/p>\n<pre><code class=\"language-php\">namespace AppModels;\nuse IlluminateDatabaseEloquentModel;\nuse IlluminateDatabaseEloquentSoftDeletes;\n\nclass Flight extends Model\n{\n   use SoftDeletes;\n}<\/code><\/pre>\n<h3>Como adicionar uma coluna delete_at<\/h3>\n<p>Antes que voc\u00ea possa come\u00e7ar a usar a exclus\u00e3o tempor\u00e1ria, seu banco de dados deve ter uma coluna <code>delete_at<\/code>. Voc\u00ea adiciona essa coluna usando um m\u00e9todo auxiliar do Laravel <code>Schema<\/code> builder, conforme mostrado abaixo:<\/p>\n<pre><code class=\"language-php\">use IlluminateDatabaseSchemaBlueprint;\nuse IlluminateSupportFacadesSchema;\n\nSchema::table('users', function (Blueprint $table) {\n   $table-&gt;softDeletes();\n});\n\nSchema::table('users', function (Blueprint $table) {\n   $table-&gt;dropSoftDeletes();\n});<\/code><\/pre>\n<p>Isso adiciona uma coluna <code>delete_at<\/code> que \u00e9 atualizada com a data e a hora, no caso de uma a\u00e7\u00e3o de exclus\u00e3o tempor\u00e1ria bem-sucedida.<\/p>\n<h3>Como incluir modelos com exclus\u00e3o tempor\u00e1ria<\/h3>\n<p>Se voc\u00ea quiser que os resultados da consulta incluam modelos com exclus\u00e3o tempor\u00e1ria, adicione o m\u00e9todo <code>withTrashed()<\/code> \u00e0 consulta. Um exemplo \u00e9 mostrado abaixo:<\/p>\n<pre><code class=\"language-php\">$stocks = Stock::withTrashed()-&gt;where('stock_id', 20)-&gt;get();<\/code><\/pre>\n<p>A consulta acima tamb\u00e9m incluir\u00e1 modelos com o atributo <code>deleted_at<\/code>.<\/p>\n<h3>Como recuperar apenas modelos com exclus\u00e3o suave<\/h3>\n<p>O Eloquent tamb\u00e9m permite que voc\u00ea recupere exclusivamente modelos com exclus\u00e3o tempor\u00e1ria. Voc\u00ea pode fazer isso chamando o m\u00e9todo <code>onlyTrashed()<\/code>, por exemplo:<\/p>\n<pre><code class=\"language-php\">$Stock = Stock::onlyTrashed()-&gt;where('stock_id', 1)-&gt;get();<\/code><\/pre>\n<h3>Como restaurar modelos exclu\u00eddos por software<\/h3>\n<p>Voc\u00ea tamb\u00e9m pode restaurar modelos exclu\u00eddos por software chamando o m\u00e9todo <code>restore()<\/code>.<\/p>\n<pre><code class=\"language-php\">$stocks = Stock::withTrashed()-&gt;where('stock_id', 20)-&gt;restore();<\/code><\/pre>\n<p>Isso altera o campo <code>delete_at<\/code> de um modelo exclu\u00eddo suavemente para nulo. Se o modelo n\u00e3o tiver sido exclu\u00eddo suavemente, ele deixar\u00e1 o campo inalterado.<\/p>\n<h2>6. Eloquent Factories<\/h2>\n<p>O modelo factories no Laravel criam dados fict\u00edcios que voc\u00ea pode usar para testar seu aplicativo ou para alimentar seu banco de dados. Para implementar isso, voc\u00ea cria um modelo em uma classe de f\u00e1brica, conforme mostrado no exemplo abaixo. O trecho de c\u00f3digo cria o modelo factories que pode gerar fornecedores falsos de um produto e seus pre\u00e7os.<\/p>\n<pre><code class=\"language-php\">namespace DatabaseFactories;\nuse IlluminateDatabaseEloquentFactoriesFactory;\nuse IlluminateSupportStr;\n\nclass StockFactory extends Factory\n{\n    public function definition()\n    {\n        return [\n            'supplier_name' =&gt; fake()-&gt;name(),\n            'price' =&gt; fake()-&gt;numberBetween($min = 1500, $max = 6000),\n        ];\n    }\n}<\/code><\/pre>\n<p>O m\u00e9todo <code>definition()<\/code> no exemplo acima retorna um conjunto de valores de atributos que o Laravel usa ao criar o modelo. O auxiliar falso ajuda o modelo factories a acessar a biblioteca do PHP, <a href=\"https:\/\/fakerphp.github.io\/\" target=\"blank\" rel=\"noopener\">Faker<\/a>.<\/p>\n<h2 id=\"h.kvdd4m1lmda5\">Resumo<\/h2>\n<p>O Eloquent torna mais simples as tarefas de desenvolvimento de aplicativos no Laravel. Ele \u00e9 igualmente eficaz na cria\u00e7\u00e3o de consultas simples ou complexas, gra\u00e7as a implementa\u00e7\u00f5es como relacionamentos. A simplicidade de gerar dados fict\u00edcios funcionais usando o modelo factories \u00e9 ideal para desenvolvedores que buscam criar testes robustos para seus aplicativos. Adicionalmente, os escopos do Eloquent contribuem para simplificar consultas complexas, mantendo o c\u00f3digo organizado e claro.<\/p>\n<p>Embora este artigo tenha abordado apenas seis de seus principais recursos, o Eloquent tem outras funcionalidades poderosas. O uso de modelos compartilh\u00e1veis e reutiliz\u00e1veis tornou o Eloquent um recurso popular entre os desenvolvedores, e a simplicidade das consultas do Eloquent faz do Laravel um framework de f\u00e1cil desenvolvimento, mesmo para iniciantes.<\/p>\n<p>Seja qual for o seu n\u00edvel de experi\u00eancia, a plataforma de <a href=\"https:\/\/sevalla.com\/application-hosting\/\">hospedagem de aplicativos web<\/a> da Kinsta est\u00e1 aqui para apoiar desenvolvedores como voc\u00ea. Nosso <a href=\"https:\/\/docs.sevalla.com\/templates\/overviewphp-examples#laravel\">modelo de in\u00edcio r\u00e1pido do Laravel<\/a> mostra como \u00e9 f\u00e1cil colocar seu aplicativo em funcionamento em nossos servidores dentro da <a href=\"https:\/\/kinsta.com\/pt\/blog\/plataforma-de-nuvem-para-desenvolvedores\/\">rede de n\u00edvel premium<\/a> do Google Cloud.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Laravel \u00e9 um framework PHP de c\u00f3digo aberto e f\u00e1cil de usar. Um de seus recursos mais avan\u00e7ados \u00e9 o Eloquent, um mapeador de objeto-relacional (ORM) &#8230;<\/p>\n","protected":false},"author":259,"featured_media":66855,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[984],"class_list":["post-66854","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-laravel"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Seis Coisas que Voc\u00ea Precisa Saber para Dominar o Laravel Eloquent - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Atualize suas habilidades no Laravel com escopos de consulta Eloquent, relacionamentos, mutadores e acessores, cole\u00e7\u00f5es, exclus\u00e3o de modelos e factories.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Seis Coisas que Voc\u00ea Precisa Saber para Dominar o Laravel Eloquent\" \/>\n<meta property=\"og:description\" content=\"Atualize suas habilidades no Laravel com escopos de consulta Eloquent, relacionamentos, mutadores e acessores, cole\u00e7\u00f5es, exclus\u00e3o de modelos e factories.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-02-08T18:37:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-14T14:18:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/02\/master-laravel-eloquent.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Steve Bonisteel\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Atualize suas habilidades no Laravel com escopos de consulta Eloquent, relacionamentos, mutadores e acessores, cole\u00e7\u00f5es, exclus\u00e3o de modelos e factories.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/02\/master-laravel-eloquent.png\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Steve Bonisteel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/\"},\"author\":{\"name\":\"Steve Bonisteel\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f\"},\"headline\":\"Seis Coisas que Voc\u00ea Precisa Saber para Dominar o Laravel Eloquent\",\"datePublished\":\"2024-02-08T18:37:33+00:00\",\"dateModified\":\"2024-05-14T14:18:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/\"},\"wordCount\":1765,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/02\/master-laravel-eloquent.png\",\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/\",\"name\":\"Seis Coisas que Voc\u00ea Precisa Saber para Dominar o Laravel Eloquent - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/02\/master-laravel-eloquent.png\",\"datePublished\":\"2024-02-08T18:37:33+00:00\",\"dateModified\":\"2024-05-14T14:18:05+00:00\",\"description\":\"Atualize suas habilidades no Laravel com escopos de consulta Eloquent, relacionamentos, mutadores e acessores, cole\u00e7\u00f5es, exclus\u00e3o de modelos e factories.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/02\/master-laravel-eloquent.png\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/02\/master-laravel-eloquent.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/laravel\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Seis Coisas que Voc\u00ea Precisa Saber para Dominar o Laravel Eloquent\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f\",\"name\":\"Steve Bonisteel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0adffb3f9c86a6ec8245f8399d540823?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0adffb3f9c86a6ec8245f8399d540823?s=96&d=mm&r=g\",\"caption\":\"Steve Bonisteel\"},\"description\":\"Steve Bonisteel is a Technical Editor at Kinsta who began his writing career as a print journalist, chasing ambulances and fire trucks. He has been covering Internet-related technology since the late 1990s.\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/author\/stevebonisteel\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Seis Coisas que Voc\u00ea Precisa Saber para Dominar o Laravel Eloquent - Kinsta\u00ae","description":"Atualize suas habilidades no Laravel com escopos de consulta Eloquent, relacionamentos, mutadores e acessores, cole\u00e7\u00f5es, exclus\u00e3o de modelos e factories.","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:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/","og_locale":"pt_PT","og_type":"article","og_title":"Seis Coisas que Voc\u00ea Precisa Saber para Dominar o Laravel Eloquent","og_description":"Atualize suas habilidades no Laravel com escopos de consulta Eloquent, relacionamentos, mutadores e acessores, cole\u00e7\u00f5es, exclus\u00e3o de modelos e factories.","og_url":"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2024-02-08T18:37:33+00:00","article_modified_time":"2024-05-14T14:18:05+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/02\/master-laravel-eloquent.png","type":"image\/png"}],"author":"Steve Bonisteel","twitter_card":"summary_large_image","twitter_description":"Atualize suas habilidades no Laravel com escopos de consulta Eloquent, relacionamentos, mutadores e acessores, cole\u00e7\u00f5es, exclus\u00e3o de modelos e factories.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/02\/master-laravel-eloquent.png","twitter_creator":"@kinsta_pt","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Steve Bonisteel","Tempo estimado de leitura":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/"},"author":{"name":"Steve Bonisteel","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f"},"headline":"Seis Coisas que Voc\u00ea Precisa Saber para Dominar o Laravel Eloquent","datePublished":"2024-02-08T18:37:33+00:00","dateModified":"2024-05-14T14:18:05+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/"},"wordCount":1765,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/02\/master-laravel-eloquent.png","inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/","url":"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/","name":"Seis Coisas que Voc\u00ea Precisa Saber para Dominar o Laravel Eloquent - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/02\/master-laravel-eloquent.png","datePublished":"2024-02-08T18:37:33+00:00","dateModified":"2024-05-14T14:18:05+00:00","description":"Atualize suas habilidades no Laravel com escopos de consulta Eloquent, relacionamentos, mutadores e acessores, cole\u00e7\u00f5es, exclus\u00e3o de modelos e factories.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/02\/master-laravel-eloquent.png","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2024\/02\/master-laravel-eloquent.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-eloquent\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Laravel","item":"https:\/\/kinsta.com\/pt\/topicos\/laravel\/"},{"@type":"ListItem","position":3,"name":"Seis Coisas que Voc\u00ea Precisa Saber para Dominar o Laravel Eloquent"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/d84ceff87bd64a4368a581fc8aa8bd6f","name":"Steve Bonisteel","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0adffb3f9c86a6ec8245f8399d540823?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0adffb3f9c86a6ec8245f8399d540823?s=96&d=mm&r=g","caption":"Steve Bonisteel"},"description":"Steve Bonisteel is a Technical Editor at Kinsta who began his writing career as a print journalist, chasing ambulances and fire trucks. He has been covering Internet-related technology since the late 1990s.","url":"https:\/\/kinsta.com\/pt\/blog\/author\/stevebonisteel\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/66854","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/259"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=66854"}],"version-history":[{"count":7,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/66854\/revisions"}],"predecessor-version":[{"id":68293,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/66854\/revisions\/68293"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/66854\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/66854\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/66854\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/66854\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/66854\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/66854\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/66854\/translations\/es"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/66854\/translations\/nl"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/66854\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/66855"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=66854"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=66854"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=66854"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}