Neue Antwort
Als ich diese Antwort gab, hatte Laravel keine Möglichkeit, dies direkt zu tun , aber jetzt können Sie einfach:
$columns = Schema::getColumnListing('users');
Alte Antwort
Die Verwendung von Attributen wird nicht funktionieren, denn wenn Sie dies tun
$model = new ModelName;
Sie haben keine Attribute für dieses Modell festgelegt und erhalten nichts.
Dann gibt es dafür immer noch keine wirkliche Option, also musste ich auf die Datenbankebene runtergehen und das ist mein 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;
}
}
Verwenden Sie es dabei:
$model = User::find(1);
dd( $model->getAllColumnsNames() );