如何使用Schema,DB或Eloquent在Laravel 4中获取数组或对象中表的列名。
似乎找不到可用的功能,也许您有一些自定义实现。
谢谢。
在我给出这个答案的时候, Laravel还没有直接做到这一点的方法 ,但是现在您可以:
$columns = Schema::getColumnListing('users');
使用属性将不起作用,因为如果您这样做
$model = new ModelName;
您没有为该模型设置任何属性,您将一无所获。
然后仍然没有真正的选择,因此我不得不深入到数据库级别,这是我的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; } }
使用它来做:
$model = User::find(1); dd( $model->getAllColumnsNames() );