Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak uzyskać nazwy kolumn w Laravel 4?

Nowa odpowiedź

W czasie, gdy udzieliłem tej odpowiedzi, Laravel nie miał możliwości zrobienia tego bezpośrednio , ale teraz możesz po prostu:

$columns = Schema::getColumnListing('users');

Stara odpowiedź

Używanie atrybutów nie zadziała, ponieważ jeśli to zrobisz

$model = new ModelName;

Nie masz ustawionych atrybutów dla tego modelu i nic nie otrzymasz.

Wtedy nadal nie ma na to realnej opcji, więc musiałem zejść na poziom bazy danych i to jest mój 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;
    }

}

Użyj tego, robiąc:

$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. Czy MySQL obsługuje datę historyczną (np. 1200)?

  2. Prawidłowy sposób przekazywania od 5000 do 100 000 wartości w klauzuli mysql WHERE

  3. Pobieranie danych z mysql do StreamBuilder Flutter

  4. Serwer MYSQL zniknął

  5. PHP:Zapytanie PDO nie zwraca żadnych wyników, ale to samo zapytanie zwraca 4 wyniki w phpmyadmin?