How to select all column name from a table in laravel?
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);
}
How do I get database column names in Laravel?
New Answer
At the time I gave this answer Laravel hadn't a way to do this directly, but now you can just:
$columns = Schema::getColumnListing('users');
Old Answer
Using attributes won't work because if you do
$model = new ModelName;
You have no attributes set to that model and you'll get nothing.
Then there is still no real option for that, so I had to go down to the database level and this is my BaseModel:
<?php
class BaseModel extends \Eloquent {
public function getAllColumnsNames()
{
switch (DB::connection()->getConfig('driver')) {
case 'pgsql':
$query = "SELECT column_name FROM information_schema.columns WHERE table_name = '".$this->table."'";
$column_name = 'column_name';
$reverse = true;
break;
case 'mysql':
$query = 'SHOW COLUMNS FROM '.$this->table;
$column_name = 'Field';
$reverse = false;
break;
case 'sqlsrv':
$parts = explode('.', $this->table);
$num = (count($parts) - 1);
$table = $parts[$num];
$query = "SELECT column_name FROM ".DB::connection()->getConfig('database').".INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'".$table."'";
$column_name = 'column_name';
$reverse = false;
break;
default:
$error = 'Database driver not supported: '.DB::connection()->getConfig('driver');
throw new Exception($error);
break;
}
$columns = array();
foreach(DB::select($query) as $column)
{
$columns[] = $column->$column_name;
}
if($reverse)
{
$columns = array_reverse($columns);
}
return $columns;
}
}
Use it doing:
$model = User::find(1);
dd( $model->getAllColumnsNames() );
laravel:how to get columns name of eloquent model?
$columns = Schema::getColumnListing('users'); // users table
dd($columns); // dump the result and die
How can I get some specific columns name from laravel table. (not all columns name)
You can use the filter()
function of laravel collection, i.e.:
$columnNames = collect(DB::getSchemaBuilder()->getColumnListing('table'));
$columnNames = $columnNames->filter(function ($value, $key) {
return in_array($value, ['id', 'created_at', 'updated_at']) === false;
});
Laravel get specific column name value with passing column name as string to DB result
You have to put curly brackets around the dynamic property you want to access to:
return $document->{$table_info['column_name']};
This way, the whole $table_info['column_name']
is read entirely and not only $table_info
, which is an array.
Get column names in Laravel as ordered on the Table
You'll have to order the columns by ordinal_position
:
public function getTableColumns()
{
return $this->getConnection()->select(
(new \Illuminate\Database\Schema\Grammars\MySqlGrammar)->compileColumnListing()
.' order by ordinal_position',
[$this->getConnection()->getDatabaseName(), $this->getTable()]
);
}
How to get table column names as array from model
You can use the getColumnListing()
method:
use Schema;
Schema::getColumnListing($this->getTable())
Related Topics
Exclude Hidden Files from Scandir
How to Prefix a Positive Number with Plus Sign in PHP
How to Send Multiple Attachment in Single Mail in PHP
Sort Xml via Attribute Value PHP
Can Anyone Get Access to My PHP Source Code
Getting the Full Url Including the Query String After Hash
How to Round to Nearest Thousand
Composer Running Out of Memory on Every Project, MAC Os X
How to Force Doctrine to Update Array Type Fields
How to Reuse Deleted Primary Keys in MySQL
Codeigniter Csrf Valid for Only One Time Ajax Request
Ajaxify Header Cart Items Count in Woocommerce
PHP Authentication with Multiple Domains and Subdomains
Rsa Encryption/Decryption Compatible with JavaScript and PHP
How to Check If Variable Is Array... or Something Array-Like
Paypal Gateway Has Rejected Request. Security Header Is Not Valid (#10002: Security Error Magento