{"id":4015,"date":"2017-10-17T16:16:19","date_gmt":"2017-10-17T19:16:19","guid":{"rendered":"http:\/\/blog.dialhost.com.br\/?p=4015"},"modified":"2019-05-03T17:19:44","modified_gmt":"2019-05-03T20:19:44","slug":"migrations-relacionando-tabelas-laravel","status":"publish","type":"post","link":"https:\/\/www.dialhost.com.br\/blog\/migrations-relacionando-tabelas-laravel\/","title":{"rendered":"Criando Migrations com Laravel 5.5"},"content":{"rendered":"\n<p>Quando nossa equipe inicia um determinado projeto, costumamos reunir para discutir sobre a estrutura do banco de dados, como as regras de neg\u00f3cio ser\u00e3o implementadas e os dados ser\u00e3o gravados para tudo funcionar o mais perfeito poss\u00edvel. Desta discuss\u00e3o, j\u00e1 montamos o primeiro modelo de relacionamentos das tabelas no banco de dados. Costuma ser um modelo r\u00e1pido feito no WorkBench.<\/p>\n\n\n\n<p>Acredito que este processo seja parecido em diversas empresas de desenvolvimento, quando est\u00e3o iniciando um projeto. Agora apresento algumas facilidades e seguran\u00e7as que os Migrations do Laravel implementam para a montagem da estrutura do seu banco de dados, assim como seu relacionamento como um todo.<\/p>\n\n\n\n<p>Como exemplo pr\u00e1tico, montei este banco que simula o cat\u00e1logo de produtos de uma loja. Este banco possui os produtos e seu relacionamento com a linha de produtos.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" width=\"700\" height=\"261\" src=\"https:\/\/www.dialhost.com.br\/blog\/wp-content\/uploads\/2019\/05\/migrations.jpg\" alt=\"\" class=\"wp-image-8888\" srcset=\"https:\/\/www.dialhost.com.br\/blog\/wp-content\/uploads\/2019\/05\/migrations.jpg 700w, https:\/\/www.dialhost.com.br\/blog\/wp-content\/uploads\/2019\/05\/migrations-300x112.jpg 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><figcaption>Migration<\/figcaption><\/figure>\n\n\n\n<div id=\"toc_container\" class=\"have_bullets\"><p class=\"toc_title\">T&oacute;picos<\/p><ul class=\"toc_list\"><li><a href=\"#criando-as-migrations\">Criando as Migrations<\/a><ul><li><ul><li><a href=\"#up\">UP<\/a><\/li><li><a href=\"#down\">Down<\/a><\/li><\/ul><\/li><\/ul><\/li><li><a href=\"#relacionando-tabelas\">Relacionando tabelas<\/a><\/li><li><a href=\"#removendo-um-relacionamento\">Removendo um relacionamento<\/a><\/li><\/ul><\/div>\n<h2><span id=\"criando-as-migrations\">Criando as Migrations<\/span><\/h2>\n\n\n\n<p>O conceito de <em>migrations<\/em> trazido pelo Laravel permite o controle de vers\u00f5es e assim facilitar a modifica\u00e7\u00e3o e compartilhamento da estrutura do banco de dados entre equipes. Imagine voc\u00ea mexendo em um projeto, em seu ambiente de desenvolvimento. Voc\u00ea cria uma nova coluna em seu banco de dados e continua desenvolvendo seu c\u00f3digo normalmente. Sem as&nbsp;<em>migrations&nbsp;<\/em>seu colega pega seu c\u00f3digo coloca no ambiente de desenvolvimento dele e tenta rodar. \u00c9 claro que teremos diversos erros disparando na tela deste cara.<\/p>\n\n\n\n<p>Agora com as&nbsp;<em>migrations<\/em>&nbsp;seu colega de trabalho ver\u00e1 nos registros de versionamento do c\u00f3digo que teve uma atualiza\u00e7\u00e3o de arquivos na pasta &#8220;<em>migrations<\/em>&#8221; e ent\u00e3o basta ele rodar o comando php <strong>artisan migrate<\/strong>&nbsp;que seu banco estar\u00e1 totalmente atualizado.<\/p>\n\n\n\n<p>Para criar uma&nbsp;<em>migration<\/em>, durante o desenvolvimento do c\u00f3digo&nbsp;\u00e9 importante que tenhamos uma configura\u00e7\u00e3o de banco de dados. Afinal no fim das contas as <em>migrations <\/em>ir\u00e3o produzir um banco de dados.<\/p>\n\n\n\n<p>Para configur\u00e1-lo basta setar as configura\u00e7\u00f5es do banco de dados, criado em seu servidor, dentro do arquivo <strong>.env&nbsp;<\/strong>que fica na raiz do projeto.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">DB_CONNECTION=mysql<br> DB_HOST=127.0.0.1<br> DB_PORT=3306<br> DB_DATABASE=my_store<br> DB_USERNAME=fmv<br> DB_PASSWORD=$%SDFFHHJ<\/pre>\n\n\n\n<p>Ahhh, quase ia me esquecendo! Se voc\u00ea chegou aqui mas est\u00e1 perdido em <a href=\"http:\/\/blog.dialhost.com.br\/desenvolvimento-2\/laravel-5-5-novidades-instalar\/\" target=\"_blank\" rel=\"noopener noreferrer\">como instalar o Laravel, tenho o primeiro artigo desta s\u00e9rie<\/a>.<\/p>\n\n\n\n<p>Tudo configurado, agora vamos gerar nossas novas classes de <em>migrations<\/em>. Isto tudo ser\u00e1 feito atrav\u00e9s do comando&nbsp;<strong>artisan make:migration<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">php artisan make:migration create_product_line --create=product_line<br> php artisan make:migration create_product --create=product<\/pre>\n\n\n\n<p>Ao final de cada comando, voc\u00eas podem ver que adicionei a op\u00e7\u00e3o <strong>&#8211;create<\/strong>. Esta op\u00e7\u00e3o permite que eu defina o nome da tabela que eu estou criando. Existem outras op\u00e7\u00f5es para este comando que voc\u00eas podem ver na <a href=\"https:\/\/laravel.com\/docs\/5.5\/migrations\" target=\"_blank\" rel=\"noopener noreferrer\">documenta\u00e7\u00e3o completa do Laravel 5.5<\/a>.<\/p>\n\n\n\n<p>A estrutura da <em>migration<\/em> \u00e9 simples. Ela importa as classes&nbsp;<strong>Schema,&nbsp;Blueprint e&nbsp;Migration&nbsp;<\/strong> e possui 2 fun\u00e7\u00f5es:<\/p>\n\n\n\n<h4><span id=\"up\">UP<\/span><\/h4>\n\n\n\n<p>Esta fun\u00e7\u00e3o \u00e9 a respons\u00e1vel pela implementa\u00e7\u00e3o das atualiza\u00e7\u00f5es do banco. criar uma tabela, atualizar uma coluna e etc.<\/p>\n\n\n\n<h4><span id=\"down\">Down<\/span><\/h4>\n\n\n\n<p>\u00c9 a fun\u00e7\u00e3o que far\u00e1 exatamente o inverso da fun\u00e7\u00e3o <strong>UP&nbsp;<\/strong>revertendo seu banco de dados ao estado anterior a esta atualiza\u00e7\u00e3o.<\/p>\n\n\n\n<p>Ent\u00e3o, minhas classes ficaram desta forma.<\/p>\n\n\n\n<p><strong>create_product&nbsp;<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;?php<br> use Illuminate\\Support\\Facades\\Schema;<br> use Illuminate\\Database\\Schema\\Blueprint;<br> use Illuminate\\Database\\Migrations\\Migration;<br> class create_product extends Migration<br> {<br> public function up() {<br> Schema::create('product', function (Blueprint $table) {<br> $table->smallIncrements('id');<br> $table->string('description')->unique();<br> $table->string('expiration_date');<br> $table->decimal('price', 5, 2);<br> $table->timestamps();<br> $table->engine = 'InnoDB';<br> });<br> }<br> public function down() {<br> Schema::drop('product');<br> }<br> }<\/pre>\n\n\n\n<p><strong>create_product_line&nbsp;<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;?php<br> use Illuminate\\Support\\Facades\\Schema;<br> use Illuminate\\Database\\Schema\\Blueprint;<br> use Illuminate\\Database\\Migrations\\Migration;<br> class\u00a0create_product_line extends Migration<br> {<br> public function up()\u00a0{<br> Schema::create('product_line', function (Blueprint $table) {<br> $table->smallIncrements('id');<br> $table->string('description')->unique();<br> $table->timestamps();<br> $table->engine = 'InnoDB';<br> });<br> }<br> public function down()\u00a0{<br> Schema::drop('product');<br> }<br> }<\/pre>\n\n\n\n<p>Acima voc\u00ea vai ver que existe uma defini\u00e7\u00e3o que n\u00e3o estava em meu diagrama.&nbsp;<strong>$table-&gt;timestamps();&nbsp;<\/strong>Isto \u00e9 um padr\u00e3o do <a href=\"https:\/\/laravel.com\/docs\/5.5\/eloquent\" target=\"_blank\" rel=\"noopener noreferrer\">Eloquent do Laravel <\/a>para controlar quando um dado \u00e9 criado e atualizado.<\/p>\n\n\n\n<p>Outra defini\u00e7\u00e3o do diagrama por\u00e9m, n\u00e3o foi inclu\u00edda de prop\u00f3sito.&nbsp; Fiz isto para chegar finalmente ao objetivo deste post. Os relacionamentos entre as tabelas.<\/p>\n\n\n\n<h2><span id=\"relacionando-tabelas\">Relacionando tabelas<\/span><\/h2>\n\n\n\n<p>Com as&nbsp;<em>migrations&nbsp;<\/em>\u00e9 poss\u00edvel criar foreign keys e definir o relacionamento entre as tabelas do seu banco de dados. Este relacionamento cria restri\u00e7\u00f5es que protegem a integridade dos dados&nbsp;suas tabelas.<\/p>\n\n\n\n<p>Para criar este relacionamento \u00e9 bem simples.&nbsp; Voltemos ao nosso exemplo no arquivo <strong>create_product&nbsp;<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u2026<br> Schema::create('products', function (Blueprint $table) {<br> $table->smallIncrements('id');<br> $table->smallInteger('product_line_id');<br> $table->string('description','100')->unique();<br> $table->integer('expiration_time');<br> $table->decimal('price',5,2);<br> $table->timestamps();<br> $table->foreign('product_line_id')<br> ->references('id')<br> ->on('product_lines');<br> });<br> \u2026<\/pre>\n\n\n\n<p>Traduzindo a linha nova, temos uma <strong>Foreign key<\/strong> que referencia \u00e0 coluna &#8220;<strong>id&#8221;&nbsp;<\/strong>na tabela <strong>&#8220;product_line&#8221;<\/strong>.<\/p>\n\n\n\n<p>Al\u00e9m disto \u00e9 poss\u00edvel adicionar restri\u00e7\u00f5es para qualquer a\u00e7\u00e3o de atualiza\u00e7\u00e3o (onUpdate)&nbsp;e exclus\u00e3o (onDelete) de registros dentro da tabela.&nbsp; Neste caso&nbsp;tratarei para que sempre que houver a exclus\u00e3o de uma linha de produtos este perca a refer\u00eancia com a tabela product_line (Setar como nulo).<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u2026<br> $table->integer('unit_id')<br> ->unsigned()<br> ->nullable();<br> \u2026<br> $table->foreign('product_line_id')<br> ->references('id')<br> ->on('product_line')<br> ->onDelete('set null');<br> $table->timestamps();<br> });<br> \u2026<\/pre>\n\n\n\n<p>Desta forma eu permito que uma linha de produto seja exclu\u00eddo. Claro que aqui o produto ficar\u00e1 orf\u00e3o de uma linha de produto. Mas, por enquanto estamos apenas trabalhando as regras do banco.<\/p>\n\n\n\n<h2><span id=\"removendo-um-relacionamento\">Removendo um relacionamento<\/span><\/h2>\n\n\n\n<p>Apenas para concluir&#8230; Se quiser remover o relacionamento criado isto \u00e9 poss\u00edvel utilizando o m\u00e9todo <strong>dropForeign<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$table->dropForeign(['product_line_id']);<\/pre>\n\n\n\n<p>Agora que as&nbsp;<em>migrations<\/em> est\u00e3o completas o pr\u00f3ximo passo ser\u00e1 definir as Models. Mas, este fica pro pr\u00f3ximo artigo. \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Apresento algumas facilidades e seguran\u00e7as que os Migrations do Laravel implementam para a montagem da estrutura do seu banco de dados, assim como seu relacionamento como um todo.\t\t\t\t<\/p>\n","protected":false},"author":1,"featured_media":8883,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[23,24,12],"tags":[76],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v15.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Criando Migrations com Laravel 5.5 - Blog DialHost<\/title>\n<meta name=\"description\" content=\"Apresento algumas facilidades que os Migrations do Laravel implementam para a montagem do seu banco de dados, assim como seu relacionamento como um todo.\" \/>\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\/migrations-relacionando-tabelas-laravel\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Criando Migrations com Laravel 5.5 - Blog DialHost\" \/>\n<meta property=\"og:description\" content=\"Apresento algumas facilidades que os Migrations do Laravel implementam para a montagem do seu banco de dados, assim como seu relacionamento como um todo.\" \/>\n<meta property=\"og:url\" content=\"\/blog\/migrations-relacionando-tabelas-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=\"2017-10-17T19:16:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-05-03T20:19:44+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\/migrations-relacionando-tabelas-laravel\/#primaryimage\",\"inLanguage\":\"pt-BR\",\"url\":\"https:\/\/www.dialhost.com.br\/blog\/wp-content\/uploads\/2017\/11\/eloquent-laravel-img.png\",\"width\":1400,\"height\":520,\"caption\":\"laravel\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/migrations-relacionando-tabelas-laravel\/#webpage\",\"url\":\"https:\/\/www.dialhost.com.br\/blog\/migrations-relacionando-tabelas-laravel\/\",\"name\":\"Criando Migrations com Laravel 5.5 - Blog DialHost\",\"isPartOf\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/migrations-relacionando-tabelas-laravel\/#primaryimage\"},\"datePublished\":\"2017-10-17T19:16:19+00:00\",\"dateModified\":\"2019-05-03T20:19:44+00:00\",\"description\":\"Apresento algumas facilidades que os Migrations do Laravel implementam para a montagem do seu banco de dados, assim como seu relacionamento como um todo.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/migrations-relacionando-tabelas-laravel\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dialhost.com.br\/blog\/migrations-relacionando-tabelas-laravel\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/migrations-relacionando-tabelas-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\/migrations-relacionando-tabelas-laravel\/\",\"url\":\"\/blog\/migrations-relacionando-tabelas-laravel\/\",\"name\":\"Criando Migrations com Laravel 5.5\"}}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/migrations-relacionando-tabelas-laravel\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/migrations-relacionando-tabelas-laravel\/#webpage\"},\"author\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#\/schema\/person\/a0b10cbe35449dea173a06d4664f9fcc\"},\"headline\":\"Criando Migrations com Laravel 5.5\",\"datePublished\":\"2017-10-17T19:16:19+00:00\",\"dateModified\":\"2019-05-03T20:19:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/migrations-relacionando-tabelas-laravel\/#webpage\"},\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.dialhost.com.br\/blog\/migrations-relacionando-tabelas-laravel\/#primaryimage\"},\"keywords\":\"desenvolvimento\",\"articleSection\":\"Laravel,PHP,Tecnologias\",\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dialhost.com.br\/blog\/migrations-relacionando-tabelas-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\/4015"}],"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=4015"}],"version-history":[{"count":0,"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/posts\/4015\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/media\/8883"}],"wp:attachment":[{"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/media?parent=4015"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/categories?post=4015"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dialhost.com.br\/blog\/wp-json\/wp\/v2\/tags?post=4015"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}