{"id":28320,"date":"2021-06-07T12:05:00","date_gmt":"2021-06-07T09:05:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28320"},"modified":"2021-10-18T04:03:50","modified_gmt":"2021-10-18T01:03:50","slug":"como-usar-o-recurso-de-conexoes-multiplas-de-banco-de-dados-do-laravel-em-um-site","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pt-pt\/como-usar-o-recurso-de-conexoes-multiplas-de-banco-de-dados-do-laravel-em-um-site\/","title":{"rendered":"Como usar o recurso de conex\u00f5es m\u00faltiplas de banco de dados do Laravel em um site"},"content":{"rendered":"<p>Voc\u00ea est\u00e1 procurando conectar m\u00faltiplos bancos de dados ao seu aplicativo Laravel? \u00c0s vezes, voc\u00ea pode se deparar com uma situa\u00e7\u00e3o em que precisa lidar com mais de um banco de dados. Neste artigo, estudamos como conectar e usar m\u00faltiplos bancos de dados no aplicativo Laravel. O Laravel fornece suporte para m\u00faltiplas conex\u00f5es de banco de dados em seu pr\u00f3prio n\u00facleo.<\/p>\n<p>Normalmente, precisamos de um \u00fanico banco de dados para um site. Mas, pode ser poss\u00edvel que voc\u00ea tenha que armazenar alguns dados sobre seu aplicativo em outro banco de dados. Trabalhei em um projeto de com\u00e9rcio eletr\u00f4nico em que quer\u00edamos enviar os detalhes do pedido para um banco de dados separado. No seu caso, os requisitos podem ser diferentes.<\/p>\n<p>Dito isso, vamos dar uma olhada em como conectar e usar m\u00faltiplos bancos de dados com o Laravel.<\/p>\n<h3>Adicionar v\u00e1rias conex\u00f5es de banco de dados no Laravel<\/h3>\n<p>Como eu disse, o Laravel permite que voc\u00ea conecte m\u00faltiplos bancos de dados. Podemos usar uma plataforma de banco de dados diferente como SQLite, MySQL, SQLSRV com Laravel. Para este tutorial, vou usar outra inst\u00e2ncia do MySQL de um banco de dados separado. Em outras palavras, vamos lidar com um banco de dados MySQL separado como armazenamento adicional.<\/p>\n<p>O Laravel armazena uma conex\u00e3o de banco de dados no <code>config\/database.php<\/code>arquivo. Para adicionar outra conex\u00e3o do MySQL, temos que modificar este arquivo.<\/p>\n<p>Vamos adicionar outra conex\u00e3o chamada &#8216;mysql2&#8217;. Voc\u00ea pode dar qualquer outro nome a esta conex\u00e3o. Apenas certifique-se de usar o mesmo nome ao interagir com o banco de dados.<\/p>\n<p><strong>config \/ database.php<\/strong><\/p>\n<pre><code>&lt;?php\n\u00a0\nuse IlluminateSupportStr;\n\u00a0\nreturn [\n\u00a0\u00a0\u00a0\u00a0...\n\u00a0\n\u00a0\u00a0\u00a0\u00a0'connections' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0...\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0...\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'mysql' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'driver' =&gt; 'mysql',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'url' =&gt; env('DATABASE_URL'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'host' =&gt; env('DB_HOST', '127.0.0.1'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'port' =&gt; env('DB_PORT', '3306'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'database' =&gt; env('DB_DATABASE', 'forge'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'username' =&gt; env('DB_USERNAME', 'forge'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'password' =&gt; env('DB_PASSWORD', ''),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'unix_socket' =&gt; env('DB_SOCKET', ''),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'charset' =&gt; 'utf8mb4',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'collation' =&gt; 'utf8mb4_unicode_ci',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'prefix' =&gt; '',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'prefix_indexes' =&gt; true,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'strict' =&gt; true,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'engine' =&gt; null,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'options' =&gt; extension_loaded('pdo_mysql')? array_filter([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0PDO::MYSQL_ATTR_SSL_CA =&gt; env('MYSQL_ATTR_SSL_CA'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]): [],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'mysql2' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'driver' =&gt; 'mysql',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'url' =&gt; env('DATABASE_URL'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'host' =&gt; env('DB_HOST_2', '127.0.0.1'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'port' =&gt; env('DB_PORT_2', '3306'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'database' =&gt; env('DB_DATABASE_2', 'forge'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'username' =&gt; env('DB_USERNAME_2', 'forge'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'password' =&gt; env('DB_PASSWORD_2', ''),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'unix_socket' =&gt; env('DB_SOCKET', ''),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'charset' =&gt; 'utf8mb4',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'collation' =&gt; 'utf8mb4_unicode_ci',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'prefix' =&gt; '',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'prefix_indexes' =&gt; true,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'strict' =&gt; true,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'engine' =&gt; null,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'options' =&gt; extension_loaded('pdo_mysql')? array_filter([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0PDO::MYSQL_ATTR_SSL_CA =&gt; env('MYSQL_ATTR_SSL_CA'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]): [],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0]<\/code><\/pre>\n<p>No c\u00f3digo acima, a conex\u00e3o &#8216;mysql&#8217; \u00e9 a padr\u00e3o. Eu adicionei uma nova conex\u00e3o &#8216;mysql2&#8217; com diferentes constantes. Aqui, passei as constantes como DB_DATABASE_2, DB_USERNAME_2, DB_PASSWORD_2, etc. Se seu banco de dados estiver hospedado em outro servidor, voc\u00ea deve alterar as chaves de DB_HOST_2 e DB_PORT_2 tamb\u00e9m. Presumo que os dois bancos de dados estejam no mesmo servidor. Portanto, n\u00e3o estou alterando os valores dessas constantes.<\/p>\n<p>O Laravel obt\u00e9m os valores dessas constantes usando o <code>env()<\/code>m\u00e9todo. Isso significa que devemos adicionar outros detalhes do banco de dados em um arquivo &#8216;.env&#8217; como abaixo.<\/p>\n<pre><code>DB_HOST_2=127.0.0.1\nDB_PORT_2=3306\nDB_DATABASE_2=\nDB_USERNAME_2=\nDB_PASSWORD_2=<\/code><\/pre>\n<p>Ap\u00f3s realizar os passos acima, terminamos de conectar outro banco de dados no Laravel. A pr\u00f3xima coisa \u00e9 interagir com este banco de dados.<\/p>\n<h3>Execute a migra\u00e7\u00e3o em outro banco de dados no Laravel<\/h3>\n<p>Quando se trata de Laravel, devemos sempre criar tabelas no banco de dados usando Migra\u00e7\u00f5es. Digamos que queremos criar uma tabela de &#8216;produtos&#8217; em nosso banco de dados separado. Execute o comando abaixo que criar\u00e1 um arquivo de migra\u00e7\u00e3o.<\/p>\n<pre><code>php artisan make:migration create_products_table<\/code><\/pre>\n<p>Ele criar\u00e1 um novo arquivo dentro do diret\u00f3rio &#8216;banco de dados \/ migra\u00e7\u00f5es&#8217;. Abra o arquivo no editor e passe a conex\u00e3o rec\u00e9m-criada conforme mostrado abaixo.<\/p>\n<pre><code>&lt;?php\n\u00a0\nuse IlluminateDatabaseMigrationsMigration;\nuse IlluminateDatabaseSchemaBlueprint;\nuse IlluminateSupportFacadesSchema;\n\u00a0\nclass CreateProductsTable extends Migration\n{\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Run the migrations.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return void\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function up()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Schema::connection('mysql2')-&gt;create('products', function (Blueprint $table) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;id();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('name');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;timestamps();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Reverse the migrations.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return void\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function down()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Schema::connection('mysql2')-&gt;dropIfExists('products');\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Passei o valor &#8216;mysql2&#8217; para o <code>connection<\/code>m\u00e9todo da <code>Schema<\/code>classe. Isso significa que quando voc\u00ea executa o comando migrate, este c\u00f3digo executa o c\u00f3digo acima no outro banco de dados cuja string de conex\u00e3o foi passada.<\/p>\n<pre><code>php artisan migrate<\/code><\/pre>\n<p>Depois de executar o comando acima, v\u00e1 para o seu segundo banco de dados. Agora deve ter uma tabela de &#8216;produtos&#8217;.<\/p>\n<h3>Executar consultas em outro banco de dados<\/h3>\n<p>No Laravel, voc\u00ea pode interagir com o banco de dados atrav\u00e9s de um <a href=\"https:\/\/laravel.com\/docs\/master\/queries\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Query Builder<\/a> ou usando o <a href=\"https:\/\/laravel.com\/docs\/master\/eloquent\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Eloquent ORM<\/a>.<\/p>\n<p><code>DB<\/code>fachada fornece um m\u00e9todo chamado conex\u00e3o que \u00e9 usado para executar consultas em outro banco de dados. Vamos escrever uma consulta na conex\u00e3o &#8216;mysql2&#8217; usando um Query Builder.<\/p>\n<pre><code>$products = DB::connection('mysql2')-&gt;select('SELECT * FROM products');\n$products = DB::connection('mysql2')-&gt;select('SELECT * FROM products where id = ?', [1]);<\/code><\/pre>\n<p>O Query Builder executar\u00e1 automaticamente as consultas acima no outro banco de dados, fazendo refer\u00eancia ao m\u00e9todo de conex\u00e3o.<\/p>\n<p>Quando se trata do Eloquent, existem 2 maneiras de conectar bancos de dados separados. A primeira maneira \u00e9 usar a <code>$connection<\/code>vari\u00e1vel dentro de sua classe Model.<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppModels;\n\u00a0\nuse IlluminateDatabaseEloquentFactoriesHasFactory;\nuse IlluminateDatabaseEloquentModel;\n\u00a0\nclass Product extends Model\n{\n\u00a0\u00a0\u00a0\u00a0use HasFactory;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* The connection name for the model.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @var string\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0protected $connection = 'mysql2'; \/\/pass the connection name here\n}<\/code><\/pre>\n<p>Agora, o modelo &#8216;Produtos&#8217; lidar\u00e1 apenas com o segundo banco de dados.<\/p>\n<p>Na segunda op\u00e7\u00e3o, voc\u00ea pode criar uma conex\u00e3o em tempo real sempre que necess\u00e1rio. Dessa forma, voc\u00ea pode interagir com v\u00e1rios bancos de dados a partir de um \u00fanico modelo.<\/p>\n<pre><code>&lt;?php\n...\nuse AppModelsProduct;\n\u00a0\nclass ProductController extends Controller\n{\n\u00a0\u00a0\u00a0\u00a0public function index()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$product = new Product;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$product-&gt;setConnection('mysql2');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$arr_product = $product-&gt;find(1);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0dd($arr_product);\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Aqui, eu configurei o tempo de execu\u00e7\u00e3o da conex\u00e3o usando o <code>setConnection()<\/code>m\u00e9todo.<\/p>\n<p>\u00c9 isso! Espero que voc\u00ea entenda como conectar m\u00faltiplos bancos de dados no aplicativo Laravel. Por favor, compartilhe seus pensamentos e sugest\u00f5es na se\u00e7\u00e3o de coment\u00e1rios abaixo.<\/p>\n<h4>Artigos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/crie-um-site-multilingue-em-php-usando-o-laravel-framework\/\" title=\"Crie um site multil\u00edngue em PHP usando o Laravel Framework\">Crie um site multil\u00edngue em PHP usando o Laravel Framework<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-fazer-upload-e-compactar-imagens-no-laravel\/\" title=\"Um Guia para Upload e Compacta\u00e7\u00e3o de Imagens no Laravel\">Um Guia para Upload e Compacta\u00e7\u00e3o de Imagens no Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-instalar-e-usar-o-ckeditor-no-laravel\/\" title=\"Como instalar e usar o CKEditor no Laravel\">Como instalar e usar o CKEditor no Laravel<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voc\u00ea quer saber como configurar v\u00e1rias conex\u00f5es de banco de dados no laravel? Neste artigo, mostramos um guia passo a passo sobre como adicionar<\/p>\n","protected":false},"author":1,"featured_media":21643,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[502],"tags":[848],"class_list":["post-28320","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28320","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/comments?post=28320"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28320\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media\/21643"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media?parent=28320"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=28320"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=28320"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}