2017-02-11 6 views
1

laravelのすべてのデータベースに関連する生のクエリを実行します。だから、私は特定のデータベースを指してはいけません。ララベルでどうすればいいですか?あなたは私のクエリは、特定のデータベースを指していない見たよう同じクエリに対してlaravelの複数のデータベースに接続するにはどうすればよいですか?

$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); 

は、ここに私のコードです。だから私はDB::を使うべきではないと思う。どうやってやるの?

が私の現在のコードは、この貧しいエラーをスロー次のように述べている。(何よりも)

Whoops, looks like something went wrong.

+0

あなたのクエリは 'information_schema'データベースを使用しており、データベースに接続しているユーザがこのデータベースにアクセスする権限を持っていない可能性があります。 – Haridarshan

+0

@Haridarshanよく、私のアプリに 'information_schema'データベースへのアクセスを許可する方法はありますか? – stack

+0

これは、 ''によって '' @ '%'が特定されました '、'はチェックされていません。 rootユーザーでこれを実行する – Haridarshan

答えて

1

まずあなたがあまりにも自由に二重引用符を使用し、それは本当にMySQLのクエリに起こることになっていません。

第2に、https://laravel.com/docs/5.4/database#running-queriesによれば、statementは何も返しません。あなたのconfig/database.php

//other database configs 

"information_schema" => [ 
     'driver' => 'mysql', 
     'database' => 'information_schema', 
     'username' => 'user', 
     'password' => 'pass', 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '' 
] 
にエントリを追加することによって、そのデータベースを使用するようにlaravelを設定)

$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選択

1)生:

あなたが複数のデータベースを使用するためのオプションがいくつかあり

次にクエリ:

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

.envファイル。

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 /コントローラ/ 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>"; 
    } 
} 
関連する問題