Câu trả lời mới
Vào thời điểm tôi đưa ra câu trả lời này, Laravel không có cách nào để làm điều này trực tiếp , nhưng bây giờ bạn có thể chỉ:
$columns = Schema::getColumnListing('users');
Câu trả lời cũ
Việc sử dụng các thuộc tính sẽ không hoạt động vì nếu bạn làm như vậy
$model = new ModelName;
Bạn không có thuộc tính nào được đặt cho mô hình đó và bạn sẽ không nhận được gì.
Sau đó, vẫn không có tùy chọn thực sự nào cho điều đó, vì vậy tôi phải đi xuống cấp cơ sở dữ liệu và đây là BaseModel của tôi:
<?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;
}
}
Sử dụng nó để làm:
$model = User::find(1);
dd( $model->getAllColumnsNames() );