2017-02-11 7 views
1

Ich möchte eine rohe Abfrage ausführen, die sich auf alle Datenbanken in Laravel bezieht. Ich möchte also nicht auf eine bestimmte Datenbank verweisen. Wie kann ich das in Laravel machen?Wie kann ich eine Verbindung zu mehreren Datenbanken in Laravel für die gleiche Abfrage herstellen?

Hier ist mein Code:

$sql = 'SELECT table_schema \"DB_Name\", 
       Round(Sum(data_length + index_length)/1024/1024, 2) \"DB_Size_in_MB\" 
     FROM information_schema.tables 
     GROUP BY table_schema'; 
$dbs_size = DB::statement($sql); 

Wie Sie meine Abfrage sehen nicht auf eine bestimmte Datenbank nicht zeigen. Also ich denke ich sollte nicht DB:: verwenden. Wie kann ich das machen?

Darauf hingewiesen, dass mein aktueller Code diesen armen Fehler führt: (nichts mehr)

Whoops, looks like something went wrong.

+0

Ihre Abfrage verwendet die Datenbank "information_schema" und der Benutzer, mit dem Sie eine Verbindung zur Datenbank herstellen, verfügt möglicherweise nicht über die Berechtigung zum Zugriff auf diese Datenbank. – Haridarshan

+0

@Haridarshan Nun, wie kann ich die Erlaubnis der 'information_schema' Datenbank Zugänglichkeit zu meiner App geben? – stack

+0

Probieren Sie Folgendes aus: GRANT SELECT ON information_schema. * Bis "" @ "%" identifiziert durch ""; nicht angehakt. Führen Sie dies mit Root-Benutzer aus – Haridarshan

Antwort

1

Erstens verwenden Sie auch reichlich doppelte Anführungszeichen, sollte das ist nicht wirklich in MySQL-Abfragen passieren.

Zweitens, nach https://laravel.com/docs/5.4/database#running-queries, gibt statement nichts zurück.

Sie haben ein paar Optionen mehrere Datenbanken zu verwenden:

1) Raw

$sql = 'SELECT table_schema DB_Name, 
      Round(Sum(data_length + index_length)/1024/1024, 2) DB_Size_in_MB 
    FROM information_schema.tables 
    GROUP BY table_schema'; 
$dbs_size = DB::select($sql); 

2) wählen Laravel konfigurieren, die Datenbank zu verwenden, indem Sie den Eintrag in Ihrem config/database.php Zugabe

//other database configs 

"information_schema" => [ 
     'driver' => 'mysql', 
     'database' => 'information_schema', 
     'username' => 'user', 
     'password' => 'pass', 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '' 
] 

Dann Abfrage über:

$dbs_size = DB::connection("information_schema")->table("tables")->groupBy("table_schema")->select(DB::raw("...")); // rest of the query.. 
1

.env Datei.

DB_HOST=192.168.1.211 
DB_DATABASE=sonirocks_dgfbh 
DB_USERNAME=sonirocks_dgfbh 
DB_PASSWORD=sonirocks_dgfbh 

DB_HOST2=192.168.1.211 
DB_DATABASE2=sonirocks_dgfbh_log 
DB_USERNAME2=sonirocks_dgfbh 
DB_PASSWORD2=sonirocks_dgfbh 

config/database.php

'connections' => [ 

    'sqlite' => [ 
     'driver' => 'sqlite', 
     'database' => storage_path().'/database.sqlite', 
     'prefix' => '', 
    ], 

    'mysql' => [ 
     'driver' => 'mysql', 
     'host'  => env('DB_HOST', 'localhost'), 
     'database' => env('DB_DATABASE', 'forge'), 
     'username' => env('DB_USERNAME', 'forge'), 
     'password' => env('DB_PASSWORD', ''), 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '', 
     'strict' => false, 
    ], 

    'mysql2' => [ 
     'driver' => 'mysql', 
     'host'  => env('DB_HOST2', 'localhost'), 
     'database' => env('DB_DATABASE2', 'forge'), 
     'username' => env('DB_USERNAME2', 'forge'), 
     'password' => env('DB_PASSWORD2', ''), 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '', 
     'strict' => false, 
    ], 

    'pgsql' => [ 
     'driver' => 'pgsql', 
     'host'  => env('DB_HOST', 'localhost'), 
     'database' => env('DB_DATABASE', 'forge'), 
     'username' => env('DB_USERNAME', 'forge'), 
     'password' => env('DB_PASSWORD', ''), 
     'charset' => 'utf8', 
     'prefix' => '', 
     'schema' => 'public', 
    ], 

    'sqlsrv' => [ 
     'driver' => 'sqlsrv', 
     'host'  => env('DB_HOST', 'localhost'), 
     'database' => env('DB_DATABASE', 'forge'), 
     'username' => env('DB_USERNAME', 'forge'), 
     'password' => env('DB_PASSWORD', ''), 
     'prefix' => '', 
    ], 

], 

app/DbLog.php

<?php namespace App; 
use Illuminate\Database\Eloquent\Model; 
use Illuminate\Support\Facades\DB; 

class DbLog extends Model{ 
    protected $connection = ''; 

    protected $table = 'users'; 

    public function set_connection($val){ 
     $this->connection=$val; 
    } 
    public function select_all_db2_users(){ 
     $sql = " 
      SELECT * 
      FROM $this->table 
      LIMIT 0,1; 
     "; 
     $results=DB::connection($this->connection) 
      ->select(DB::raw($sql)); 
     return $results; 
    } 

    public function select_all_db_users(){ 
     $sql = " 
      SELECT * 
      FROM $this->table 
      LIMIT 0,1; 
     "; 
     $results=DB::connection($this->connection) 
      ->select(DB::raw($sql)); 
     return $results; 
    } 

    public function close_connection(){ 
     DB::disconnect('mysql2'); 
    } 
} 
?> 

App/HTTP/Controller/AdminController.php

<?php 
namespace App\Http\Controllers; 
use App\DbLog; 
class AdminController extends Controller { 
    function db1(){ 
     $DbLog=new DbLog(); 
     $DbLog->set_connection('mysql'); 
     $select_all_db2_users=$DbLog->select_all_db2_users(); 
     echo "<pre>"; 
     print_r ($select_all_db2_users); 
     echo "</pre>"; 
    } 

    function db2(){ 
     $DbLog=new DbLog(); 
     $DbLog->set_connection('mysql2'); 
     $select_all_db2_users=$DbLog->select_all_db2_users(); 
     echo "<pre>"; 
     print_r ($select_all_db2_users); 
     echo "</pre>"; 
    } 
} 
Verwandte Themen