नया उत्तर
जिस समय मैंने यह उत्तर दिया था लारवेल के पास इसे सीधे करने का कोई तरीका नहीं था , लेकिन अब आप बस कर सकते हैं:
$columns = Schema::getColumnListing('users');
पुराना उत्तर
एट्रिब्यूट का इस्तेमाल करने से काम नहीं चलेगा, क्योंकि अगर आप ऐसा करते हैं
$model = new ModelName;
आपके पास उस मॉडल के लिए कोई विशेषता सेट नहीं है और आपको कुछ भी नहीं मिलेगा।
फिर उसके लिए अभी भी कोई वास्तविक विकल्प नहीं है, इसलिए मुझे डेटाबेस स्तर पर जाना पड़ा और यह मेरा बेसमॉडल है:
<?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() );