Nyt svar
På det tidspunkt jeg gav dette svar Laravel havde ikke en måde at gøre dette direkte på , men nu kan du bare:
$columns = Schema::getColumnListing('users');
Gammelt svar
At bruge attributter virker ikke, fordi hvis du gør det
$model = new ModelName;
Du har ingen attributter indstillet til den model, og du får intet.
Så er der stadig ingen reel mulighed for det, så jeg var nødt til at gå ned til databaseniveauet, og dette er 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;
}
}
Brug det til at:
$model = User::find(1);
dd( $model->getAllColumnsNames() );