Search code examples
phpmysqldatabasepdolaravel-4

Getting all tables inside a database using Laravel 4


What do I want to achieve?

Get all table names inside a database and echo them using @foreach @endforeach. My database name is demoproject and it has some tables inside it like users, list1, list2, list3 and I need to echo all the tables.

When using var dump I get bool(true) or when echoing I get 1 with this code DB::statement('show tables from demoproject');

Why do I want to do this?

I'm making an admin panel, where I can edit tables and their rows. That's why I need to use @foreach to link them to another page.

I only need to know how I can echo all tables inside that database to continue with this project.

I'm using Laravel 4.


Solution

  • select * from information_schema.tables where table_schema='database_name'
    

    you can also do this to test or whatnot:

    $pdo = DB::connection()->getPdo();
    //run queries the normal pdo way
    

    For PGSQL;

        if (config('database.default') == 'pgsql') {
            $database_name = 'laravel';
            $tables = DB::select("SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'");
    
            foreach ($tables as $table) {
                $tablename = $table->table_name;
                if ($tablename == 'model_has_permissions' || $tablename == 'password_resets'|| $tablename == 'model_has_roles' 
                    || $tablename == 'model_has_permissions'|| $tablename == 'role_has_permissions') {
                    continue;
                }
                    DB::select("
                    SELECT setval(pg_get_serial_sequence('$table->table_name' , 'id'), coalesce(max(id)+1, 1), false)
                    FROM ".$tablename.";
                ");
                
            }
        }