バージョン選択

フォーラム

メニュー

オンライン状況

76 人のユーザが現在オンラインです。 (67 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 76
もっと...

サイト内検索

質問 > 管理機能 > テーブルのすべてのカラム名を取得したい

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_tanaka
投稿日時: 2019/9/23 11:29
対応状況: 解決済
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1610
テーブルのすべてのカラム名を取得したい
EC-CUBE 4.0.3

特定のテーブルの構造とデータをCSVに出力したいです。

テーブルのカラム名は、次のようなコードで取得できたのですが、pref_id などのKeyのカラム名を取得することができません。
$entity_name == 'Eccube\Entity\Customer';
$column_names = $em->getClassMetadata($entity_name)->getColumnNames();


Keyを含めたカラム名を取得するにはどうすればよいでしょうか?

カラム名ではなくEntityのフィールド名の取得でもかまいません。
nanasess
投稿日時: 2019/9/23 19:41
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2303
Re: テーブルのすべてのカラム名を取得したい
こんな感じでいかがでしょう?


/** @var \Doctrine\DBAL\Connection $conn */
$conn = $em->getConnection();
/** @var \Doctrine\DBAL\Schema\AbstractSchemaManager $sm */
$sm = $conn->getSchemaManager();
/** @var \Doctrine\DBAL\Schema\Column[] $columns */
$columns = $sm->listTableColumns('dtb_product');


https://www.doctrine-project.org/projects/doctrine-dbal/en/2.8/reference/schema-manager.html#listtablecolumns
h_tanaka
投稿日時: 2019/9/24 8:41
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1610
Re: テーブルのすべてのカラム名を取得したい
nanasess さん

自力で次のようにコーディングしてFKのカラム名は取得することができたのですが、カラム名の順番がテーブル構造どおりにならなくて行き詰まってました。。
            $ClassMetadata = $em->getClassMetadata($entity_name);
            $column_names = $ClassMetadata->getColumnNames();
            foreach ($ClassMetadata->getAssociationMappings() as $AssociationMapping) {
                if ($AssociationMapping['isOwningSide']) {
                    foreach ($AssociationMapping['joinColumnFieldNames'] as $join_column_field_name) {
                        $column_names[] = $join_column_field_name;
                    }
                }
            }
            $file->fputcsv($column_names);



ありがとうございます!
うまくカラム名を取得することができました。

            $conn = $em->getConnection();
            $sm = $conn->getSchemaManager();
            $columns = $sm->listTableColumns('dtb_product');
            $column_names = array_keys($columns);
            $file->fputcsv($column_names);


その後、取得したカラム名に対応するデータを取得しようとしたのですが、エラーになってしまいました。

            $sql = 'SELECT t.' . implode(',t.', $column_names);
            $sql .= ' FROM ' . $entity_name . ' t';
            $query = $em->createQuery($sql);
            $result = $query->getResult(Query::HYDRATE_ARRAY);
            foreach ($result as $row){
                $file->fputcsv($row);
            }


[Semantical Error] line 0, col 14 near 'creator_id,t.product_status_id,t.name,t.note,t.description_list,t.description_detail,t.search_word,t.free_area,t.create_date,t.update_date,t.discriminator_type': Error: Class Eccube\Entity\Product has no field or association named creator_id

調べてみたところ、FKのカラムには IDENTITY を指定すればいいみたいですが、カラム名のうちどれがFKか判定できません。
Entity 経由ではなくデータベースから直接テーブルデータを取得することはできるでしょうか?


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

h_tanaka
投稿日時: 2019/9/24 9:01
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1610
Re: テーブルのすべてのカラム名を取得したい
上記、自己解決しました。

            $stmt = $conn->query($sql);
            $result = $stmt->fetchAll();


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,307名です
総投稿数は109,692件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.