{"id":45,"date":"2017-11-27T12:51:11","date_gmt":"2017-11-27T14:51:11","guid":{"rendered":"http:\/\/www.fabianocouto.com.br\/blog\/?p=45"},"modified":"2017-12-14T20:56:23","modified_gmt":"2017-12-14T22:56:23","slug":"laravel-transacoes-de-banco-de-dados-database-transactions","status":"publish","type":"post","link":"https:\/\/www.fabianocouto.com.br\/blog\/laravel-transacoes-de-banco-de-dados-database-transactions\/","title":{"rendered":"Laravel: Transa\u00e7\u00f5es de banco de dados (Database Transactions)"},"content":{"rendered":"<p>No desenvolvimento de sistemas mais complexos, onde s\u00e3o feitas adi\u00e7\u00f5es e\/ou atualiza\u00e7\u00f5es de registros em varias tabelas durante uma rotina, para evitar registros \u00f3rf\u00e3os e inconsist\u00eancia de informa\u00e7\u00f5es no banco de dados, \u00e9 importante trabalhar com transa\u00e7\u00f5es.<\/p>\n<p>Transa\u00e7\u00f5es em banco de dados (<strong>Database Transactions<\/strong>) nada mais \u00e9 que informar pro sistema de gerenciamento, que ele deve testar e guardar todas as opera\u00e7\u00f5es que devem ser executadas no final da rotina, desta forma caso n\u00e3o ocorra nenhum erro, \u00e9 poss\u00edvel efetiv\u00e1-las, ou caso contrario, cancelar todas facilmente.<\/p>\n<p>No <strong>Laravel<\/strong> \u00e9 muito simples, como a seguir.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">&lt;?php\r\n\r\nnamespace App\\Helpers;\r\n\r\nuse App\\User;\r\nuse App\\Profile;\r\n\r\nclass UserProfileHelper\r\n{\r\n  public static function create($name, $profession)\r\n  {\r\n    try {\r\n\r\n      \/\/ Inicia transa\u00e7\u00e3o com banco de dados\r\n      \\DB::beginTransaction();\r\n\r\n      $user = new User()\r\n      $user-&gt;name = $name;\r\n      $user-&gt;save();\r\n\r\n      $profile = new Profile();\r\n      $profile-&gt;user = $user-&gt;id;\r\n      $profile-&gt;profession = $profession;\r\n      $profile-&gt;save();\r\n      \r\n      \/\/ Efetiva todas as opera\u00e7\u00f5es\r\n      \\DB::commit();\r\n\r\n      return true;\r\n\r\n    } catch (exception $e) {\r\n\r\n      \/\/ Cancela todas as opera\u00e7\u00f5es em caso de erro\r\n      \\DB::rollback();\r\n\r\n      return false;\r\n    }\r\n  }\r\n}\r\n\r\n?&gt;<\/pre>\n<p>Espero ter ajudado.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Usar transa\u00e7\u00f5es no banco de dados nada mais \u00e9 que informar pro sistema de gerenciamento, que ele deve testar e guardar todas as opera\u00e7\u00f5es que devem ser executadas no final de uma rotina.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[1,2],"tags":[5,3,9],"_links":{"self":[{"href":"https:\/\/www.fabianocouto.com.br\/blog\/wp-json\/wp\/v2\/posts\/45"}],"collection":[{"href":"https:\/\/www.fabianocouto.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fabianocouto.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fabianocouto.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fabianocouto.com.br\/blog\/wp-json\/wp\/v2\/comments?post=45"}],"version-history":[{"count":8,"href":"https:\/\/www.fabianocouto.com.br\/blog\/wp-json\/wp\/v2\/posts\/45\/revisions"}],"predecessor-version":[{"id":77,"href":"https:\/\/www.fabianocouto.com.br\/blog\/wp-json\/wp\/v2\/posts\/45\/revisions\/77"}],"wp:attachment":[{"href":"https:\/\/www.fabianocouto.com.br\/blog\/wp-json\/wp\/v2\/media?parent=45"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fabianocouto.com.br\/blog\/wp-json\/wp\/v2\/categories?post=45"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fabianocouto.com.br\/blog\/wp-json\/wp\/v2\/tags?post=45"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}