I have tried to get all column names from a table Teller
Function:
public function getTableColumns($tables)
{
return DB::select(DB::raw('SELECT
COLUMN_NAME,
DATA_TYPE,
COLUMN_DEFAULT
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
table_name = `Teller`'));
}
You can get all columns name by simply doing that...
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\DB;
public function getTableColumns($table)
{
return DB::getSchemaBuilder()->getColumnListing($table);
// OR
return Schema::getColumnListing($table);
}
Get Table Name From Model
$product = new Product;
$table = $product->getTable();
print_r($table);
Get Table Column Name From Model
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
public function getTableColumns() {
return $this->getConnection()->getSchemaBuilder()->getColumnListing($this->getTable());
}
}
Now you will get all columns of "products" table and if you need it in controller then you can get it by following way :
$product=new Product;
$columns=$product->getTableColumns();
print_r($columns);
As of Laravel 6.x this works:
$db = DB::connection()->getPdo();
$rs = $db->query('SELECT * FROM Teller LIMIT 0');
for ($i = 0; $i < $rs->columnCount(); $i++) {
$col = $rs->getColumnMeta($i);
$columns[] = $col['name'];
}
print_r($columns);
The hint here is just to go around eloquent (which should just provide a simple way to do this, but clearly does not) and grab the PDO object and then use the answer from the same question for straight PDO access
This will also work when there is no database selected by replacing 'Teller' with databasename.Teller
HTH,
-ft
Just in-case if you have multiple databases connections, try following:
Add in the top of your php script
use Illuminate\Support\Facades\Schema;
Retrieve anywhere in your code
With Database Connection
$columns = Schema::Connection('business')->getColumnListing('users'); // 'business' is your database connection
echo "<pre>";
print_r($columns);
exit();
Without Database Connection
$columns = Schema::getColumnListing('users');
echo "<pre>";
print_r($columns);
exit();
You only need extract the keys from the query response
array_keys(json_decode(json_encode($table[0]), true))
To get all raws from table:
$users = DB::table('users')->get();
This method will return the value of the column directly:
$email = DB::table('users')->where('name', 'John')->value('email');
Refer:
https://laravel.com/docs/5.1/queries
You could simply write:
public function getTableColumns($tables)
{
return DB::select(
DB::raw('SELECT * FROM `Teller`')
);
}
If you have a Teller
model you can also use Teller::all();
Update
To get all column name you can run SHOW FIELDS Teller
You can use this
DB::table('table_name')->get();