2014-09-15 2 views
3

Я создаю проект Laravel, для которого мне нужно динамически извлекать имена столбцов и их типы для некоторых таблиц в базе данных (MySQL). В настоящее время, это мое решение:Получение типов столбцов в Laravel

$columnTypes = array(); 
$columns = Schema::getColumnListing($tableName); 
foreach($columns as $columnName) { 
    $columnTypes[$columnName] = DB::connection()->getDoctrineColumn($tableName, $columnName)->getType()->getName(); 
} 

К сожалению, это требует много запросов, и, таким образом, много времени (до ~ 100мса за стол).

Существует ли более быстрый способ получения типов столбцов?

ответ

7

мышление, более быстро будет использовать (для MySQL):

$tables = array[/* table list */]; 
foreach($tables as $table){ 
    $table_info_columns = DB::select(DB::raw('SHOW COLUMNS FROM "'.$table.'"')); 

    foreach($table_info_columns as $column){ 
    $col_name = $column['Field']; 
    $col_type = $column['Type']; 
    var_dump($col_name,$col_type); 
    } 
} 
+0

Ах, интересный. Попробуй! – nhaarman

+0

, но без кавычек на имя таблицы – KoIIIeY

0

Run "композитор требует учение/DBAL", затем записать эту функцию в модели:

public function getTableColumns() { 
    $builder = $this->getConnection()->getSchemaBuilder(); 
    $columns = $builder->getColumnListing($this->getTable()); 
    $columnsWithType = collect($columns)->mapWithKeys(function ($item, $key) use ($builder) { 
     $key = $builder->getColumnType($this->getTable(), $item); 
     return [$item => $key]; 
    }); 
    return $columnsWithType->toArray(); 
} 
Смежные вопросы