web-dev-qa-db-ja.com

Laravel 5.1でデータベースのテーブルリストを取得する方法

tablesdatabaseをリストする必要があります。次のクエリが見つかりました。

SHOW TABLES LIKE  'merTrans%'

テーブルを取得しますが、foreachを使用してLaravel 5.1のテーブル名を取得するにはどうすればよいですか?

24
Balachandiran

データベース内のテーブルをリストするには、次のことができます

$tables = DB::select('SHOW TABLES');
foreach($tables as $table)
{
      echo $table->Tables_in_db_name;
}

Db_nameをデータベースの名前に変更する必要があります。

編集:次のような場合

foreach ($tables as $table) {
    foreach ($table as $key => $value)
        echo $value;
}
43
Bharat Geleda

私はこれを使用しています:

$tables = DB::connection()->getDoctrineSchemaManager()->listTableNames();

依存関係としてdoctrine/dbalが必要です。ただし、一部の移行機能を使用するにはDBALが既に必要です。

30
carlosvini

すべてのデータベースを含むクイック配列を取得するには、次のコードを使用できます。

// Iterate over the results of SHOW TABLES
// strip off all the objects and keys.
$tables = array_map('reset', \DB::select('SHOW TABLES'));

私には、これが最もエレガントなソリューションのようです。

18
Paul Olthof

Postgresユーザーの場合:

SHOW TABLESはサポートされていないため、もう少しハッキーを実行する必要があります。

$tables = DB::select("SELECT table_schema,table_name, table_catalog FROM information_schema.tables WHERE table_catalog = 'YOUR TABLE CATALOG HERE' AND table_type = 'BASE TABLE' AND table_schema = 'public' ORDER BY table_name;")

必ずtable_catalogに入力してください(これはデータベースと同等です)。結果を少し調整する必要があるかもしれません。

9
Brendan

Laravelで使用できます:

$tables = DB::select('SHOW TABLES');
5
Mindau
$tables = \DB::select("SHOW TABLES LIKE 'merTrans%'");
foreach ($tables as $table) {
  echo head($table);
}
5
rseyferth

まだコメントを追加する評判がないので、これを回答として投稿しています。

BharatのLIKE CASESの推奨事項

foreach ($tables as $table) {
    echo array_shift(array_values($table));
}

二重foreachを使用したくないが、var_dump $ tableを確認する場合、

($tables = DB::select('SHOW TABLES');

あなたが何を扱っているかを正確に見るために。

2
php_bob

Laravelプロジェクトに流れるものを追加します:-Controllerファイルに:-

 public function debate_list(){
         $records = DB::table('table_name')->get();
        return view('page_link')->with('records',$records);
    }

Page_link.blade.phpにフローを追加します:-

@foreach($records as $class)
      <tr>
        <td>{{$class->id}}</td>
        <td>
        {{$class->name}}
        </td>
        <td>
        {{$class->image_url}}
        </td>
        <td>
       {{ $class->created_at }}
        </td>

        <td>
 <a class="btn btn-primary btn-sm " href="{{route('image_status_list')}}"> VIEW</a>
 </td>

        </tr>
@endforeach
1
HeadAndTail
 protected function getNamesTablesDB(){

        $database = Config::get('database.connections.mysql.database');

        $tables = DB::select('SHOW TABLES');

        $combine = "Tables_in_".$database;

        $collection = new \Illuminate\Database\Eloquent\Collection;

        foreach($tables as $table){
            $collection->put($table->$combine, $table->$combine);
        }

        return $collection; //or compact('collection'); //for combo select
    }
1

別の解決策は、DB名を使用する必要がないことです。 'current'は最初の列のみを取ります。

function getTables()
{
    $tables = DB::select('SHOW TABLES');

    $tables = array_map('current',$tables);

    return $tables;
}
0