Nytt svar
När jag gav det här svaret hade Laravel inte ett sätt att göra det här direkt , men nu kan du bara:
$columns = Schema::getColumnListing('users');
Gammalt svar
Att använda attribut fungerar inte för om du gör det
$model = new ModelName;
Du har inga attribut inställda på den modellen och du får ingenting.
Sedan finns det fortfarande inget riktigt alternativ för det, så jag var tvungen att gå ner till databasnivån och det här är min 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;
}
}
Använd det för att:
$model = User::find(1);
dd( $model->getAllColumnsNames() );