バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > 独自追加したカラムにインデックス付加する方法

管理機能

新規スレッドを追加する

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
Goosuke
投稿日時: 2022/2/19 1:36
対応状況: −−−
半人前
登録日: 2021/6/9
居住地:
投稿: 11
Re: 独自追加したカラムにインデックス付加する方法
ざっと定義部分を見てみましたところ、マスタテーブル(SamplePaymentの場合は独自にマスタテーブルとして追加したテーブル)とJoinしているだけのように見えます。マスタテーブルとJoinしたカラム、もしくはリンク先カラムにインデックスが設定されている場合などに限り、自動的にインデックスが生成されるのかもしれません?

@ORM\JoinColumns({
* @ORM\JoinColumn(name="sample_payment_payment_status_id", referencedColumnName="id")
* })
Goosuke
投稿日時: 2022/2/19 1:17
対応状況: −−−
半人前
登録日: 2021/6/9
居住地:
投稿: 11
Re: 独自追加したカラムにインデックス付加する方法
ご返信ありがとうございます。
参考URLもありがとうございます。参考URLの方法は、結局「ec-cube4のプラグイン管理」からは外れた方法のように思います。
私も最終手段は、CREATE INDEX/DROP INDEX を、どこかに組み込もうかと考えておりました。

しかしふと、公式サンプル「SamplePayment」でカラム追加+インデックス追加してないか 試しにインストールしてみますと、思った通りdtb_orderへカラムとインデックスが付加されていました。アンインストール時にはカラムもインデックスも削除されます。
まさにこれと同じ事をしたいので、SamplePaymentが何をどう記述しているか調べてみます。分かれば良いのですが・・・

スレッドはまだしばらくこのまま置いておきますm(_ _)m
ec9iii
投稿日時: 2022/2/18 23:49
対応状況: −−−
一人前
登録日: 2014/9/8
居住地:
投稿: 117
Re: 独自追加したカラムにインデックス付加する方法
なるほど、既存テーブルの場合なかなか良いサンプルが見つかりませんね・・・
Traitでのアノテーションをいろいろと試してみましたが、エラーになってしまいました。

以下の記事がもしかすると近いことをしているのかな、とは思ったのですが、知識不足でいまいち良くわからなかったのと
おそらくプラグインを前提とした場合にはインデックスの追加だけではなく削除も考えないといけないでしょうし、非常に悩ましいところになりそうだなと思いました。。
https://alexkunin.medium.com/doctrine-symfony-adding-indexes-to-fields-defined-in-traits-a8e480af66b2


推奨されるやり方ではないのかもしれませんが、現状考えられる打開策としては、
PluginManager.phpのenable/disableのファンクションに
直接SQLで「ALTER TABLE ~」を発行するような方法になってくるのかな、と思っております。
Goosuke
投稿日時: 2022/2/18 16:56
対応状況: −−−
半人前
登録日: 2021/6/9
居住地:
投稿: 11
Re: 独自追加したカラムにインデックス付加する方法
投稿ありがとうございます。
教えていただいたURLは、新規に独自作成するテーブルの話ですよね?

既に存在する(運用中の) dtb_order に「プラグインで」インデックスを追加したいんです。


現状、dtb_orderのカラムを拡張するため、プラグイン/Entity/OrderTrait.php を作成し、
/**
* @Eccube\EntityExtension("Eccube\Entity\Order")
*/
trait OrderTrait {

/**
*
* @ORM\Column(name="hogehoge_datetime", type="datetimetz", nullable=true, options={"comment":"hogehoge日時(Asia/Tokyo)"})
*/




}
で、dtb_orderにフィールドを追加しています。

既存テーブルにインデックスを追加するEntityの記述方法が分かりません。
プラグイン/Entity/OrderTrait.php に追加記述でイケるのか、
新たに、プラグイン/Entity/インデックスを追加するための.php を作成するのか・・・
サンプルがあれば大変助かります。
ec9iii
投稿日時: 2022/2/17 11:31
対応状況: −−−
一人前
登録日: 2014/9/8
居住地:
投稿: 117
Re: 独自追加したカラムにインデックス付加する方法
Goosuke
投稿日時: 2022/2/16 18:34
対応状況: −−−
半人前
登録日: 2021/6/9
居住地:
投稿: 11
独自追加したカラムにインデックス付加する方法
▼テンプレート
[EC-CUBE] 4系
[データベース] MySql/MariaDB系
[カスタマイズの有無] プラグイン


dtb_orderに、以下のようなdatetime型のカラムを追加しました。
/**
* @ORM\Column(name="hogehoge_datetime", type="datetimetz", nullable=true, options={"comment":"hogehoge日時(Asia/Tokyo)"})
*/

この日時は、年・月・日・範囲など、頻繁に集計するのでインデックスを付けたいのですが・・・
doctrine(?)での、既存テーブルへのインデックス追加方法が分かりません。(mysqlネイティブなら分かります)

※重複したdatetimeがありますので、インデックスは、ユニーク・圧縮、共に無しで作成。
※自作プラグインです。
※プラグインインストール時に、カラムは正しく追加され、有効化後 想定通りに利用できています。
※プラグインアンインストール時には、カラム・データ・インデックス、全て消えてかまいません。というか消えるべきですよね?

ほぼ同じような質問がフォーラムにありましたが解決しておりません・・・
https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=23212&forum=2&post_id=96081#forumpost96081

よろしくお願いいたします。
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ


 



ログイン



統計情報

総メンバー数は75,099名です
総投稿数は104,361件です

投稿数ランキング

1
seasoft
7333
2
468
3217
3
AMUAMU
2712
4
nanasess
2202
5
umebius
2085
6
yuh
1664
7
red
1535
8
h_tanaka
1189
9
tsuji
942
10
fukap
907
11
shutta
835
12
tao_s
794
13 ramrun 789
14 karin 689
15 sumida 641
16
homan
633
17 DELIGHT 572
18
patapata
502
19
flealog
485
20 tonton 437
Copyright© EC-CUBE CO.,LTD. All Rights Reserved.