Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да получа имена на колони в 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() );


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL CSV импортиране:стойност за дата и час

  2. mysql подреждане на полето varchar като цяло число

  3. Принудително пускане на mysql, заобикаляйки ограничението на външния ключ

  4. MySQL дава променлив брой редове, когато заявявам схема?

  5. Списъкът SELECT не е в клауза GROUP BY и съдържа неагрегирана колона .... несъвместима с sql_mode=only_full_group_by