Nieuw antwoord
Op het moment dat ik dit antwoord gaf Laravel had geen manier om dit rechtstreeks te doen , maar nu kun je gewoon:
$columns = Schema::getColumnListing('users');
Oud antwoord
Het gebruik van attributen werkt niet, want als je dat doet
$model = new ModelName;
Je hebt geen attributen ingesteld voor dat model en je krijgt niets.
Dan is daar nog steeds geen echte optie voor, dus ik moest naar het databaseniveau en dit is mijn basismodel:
<?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;
}
}
Gebruik het om:
$model = User::find(1);
dd( $model->getAllColumnsNames() );