Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie bekomme ich Spaltennamen in Laravel 4?

Neue Antwort

Als ich diese Antwort gab, hatte Laravel keine Möglichkeit, dies direkt zu tun , aber jetzt können Sie einfach:

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

Alte Antwort

Die Verwendung von Attributen wird nicht funktionieren, denn wenn Sie dies tun

$model = new ModelName;

Sie haben keine Attribute für dieses Modell festgelegt und erhalten nichts.

Dann gibt es dafür immer noch keine wirkliche Option, also musste ich auf die Datenbankebene runtergehen und das ist mein 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;
    }

}

Verwenden Sie es dabei:

$model = User::find(1);

dd( $model->getAllColumnsNames() );