Quantcast
Channel: laravel5.8タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 87

【laravel】 DBの存在するテーブルとカラムとカラムの型を取得するあとdoctrine/dbalでjson型が扱えない件

$
0
0

環境

MySQL 5.7
Laravel 5.8

存在するテーブル

tableNames = [];
foreach (DB::select('SHOW TABLES') as $table) {
    $dbName = config('database.connections.mysql.database');
    $tableNames[] = $table->{'Tables_in_' . $dbName};
}

存在するカラムとその型

型を取得

// 存在するカラムを取得
$columns = Schema::connection('mysql')->getColumnListing($tableName);

$columnTypes = [];
foreach ($columns as $column) {
    // カラムタイプを取得
    $columnTypes[$column] = Schema::connection('mysql')->getConnection()->getDoctrineColumn($tableName, $column)->toArray()['type'];
}

intの場合 Doctrine\DBAL\Types\IntegerTypeのようにとれる。
これはSQLの型とPHPの型をマッピングするクラス。

型判定

if ($type instanceof Doctrine\DBAL\Types\StringType) {
    // ごにょごにょ
}

json型でエラー

Doctrine DBALが2.4以下だとjson型がサポート外とのこと。
エラーが出るので以下のようにjson_arrayにマッピングさせると扱えるようになる。

DB::getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('json', 'json_array');

Viewing all articles
Browse latest Browse all 87

Trending Articles