web-dev-qa-db-fra.com

Comment récupérer la liste des tables dans la base de données dans Laravel 5.1

J'ai besoin de lister la tables dans database, j'ai trouvé la requête pour 

SHOW TABLES LIKE  'merTrans%'

obtenir les tables mais comment utiliser la foreach pour obtenir les noms de table dans Laravel 5.1?

19
Balachandiran

Pour lister les tables dans la base de données, vous pouvez faire

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

Vous devrez changer le nom_base pour le nom de votre base de données. 

EDIT: POUR DES CAS SIMILAIRES

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

J'ai utilisé ceci:

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

Cela nécessite une doctrine/dbal en tant que dépendance. Mais certaines fonctionnalités de migration ont déjà besoin de DBAL pour fonctionner. 

19
carlosvini

Pour obtenir un tableau rapide contenant toutes les bases de données, vous pouvez utiliser le code suivant:

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

Pour moi, cela semble être la solution la plus élégante.

14
Paul Olthof

Pour les utilisateurs de Postgres:  

SHOW TABLES n'est pas supporté, vous devez donc faire quelque chose d'un peu plus hackey.

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

Assurez-vous de remplir table_catalog (ce qui, je suppose, est comparable à la base de données). Vous devrez peut-être modifier un peu vos résultats.

9
Brendan

À Laravel, vous pouvez utiliser:

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

Parce que je n’ai pas la réputation d’ajouter un commentaire, je l’affiche comme réponse.

Une recommandation pour Bharat's LIKE CASES

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

si vous n'aimez pas avoir un double foreach, mais assurez-vous que var_dump $ table, 

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

pour voir exactement ce que vous avez affaire. 

2
php_bob

Ajoutez un objet fluide dans votre projet Laravel: - Dans le fichier Controller: -

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

Dans page_link.blade.php, ajoutez: -

@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

Une autre solution consiste à ne pas utiliser le nom de la base de données. 'current' prendra la première colonne seulement.

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

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

    return $tables;
}
0
Prafulla Kumar Sahu