バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

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

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
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

よろしくお願いいたします。
ec9iii
投稿日時: 2022/2/17 11:31
対応状況: −−−
一人前
登録日: 2014/9/8
居住地:
投稿: 117
Re: 独自追加したカラムにインデックス付加する方法
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/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/19 1:17
対応状況: −−−
半人前
登録日: 2021/6/9
居住地:
投稿: 11
Re: 独自追加したカラムにインデックス付加する方法
ご返信ありがとうございます。
参考URLもありがとうございます。参考URLの方法は、結局「ec-cube4のプラグイン管理」からは外れた方法のように思います。
私も最終手段は、CREATE INDEX/DROP INDEX を、どこかに組み込もうかと考えておりました。

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

スレッドはまだしばらくこのまま置いておきますm(_ _)m
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")
* })
gau
投稿日時: 2022/11/14 13:37
対応状況: −−−
新米
登録日: 2016/1/31
居住地:
投稿: 6
Re: 独自追加したカラムにインデックス付加する方法
* @ORM\Column(name="hoge", type="string", length=255, nullable=true, unique=true)

これでユニークキーが付くのですが、日時だと同じものが発生してだめかも
mcontact
投稿日時: 2022/11/14 15:10
対応状況: −−−
登録日: 2022/1/22
居住地:
投稿: 1280
Re: 独自追加したカラムにインデックス付加する方法
dtb_orderテーブルへのカラム追加であればEntityファイルのtraitでの拡張を行い、
dtb_orderテーブルへのインデックス追加であれば、マイグレーションでの追加が良いと思います。

https://jum11.com/2021/09/21/ec-cube4-migration-basic/
gau
投稿日時: 2022/11/14 20:18
対応状況: −−−
新米
登録日: 2016/1/31
居住地:
投稿: 6
Re: 独自追加したカラムにインデックス付加する方法
それ、いいですね
yuh
投稿日時: 2022/12/7 14:57
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: 独自追加したカラムにインデックス付加する方法
https://alexkunin.medium.com/doctrine-symfony-adding-indexes-to-fields-defined-in-traits-a8e480af66b2

でORMのindex制御を保留しつつ実装が可能と思います。
マイグレーションのみだと
bin/console doctrine:schema:update --dump-sql --force
でまた消えちゃいますね


----------------


http://ec-lab.net/

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


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1638
8
red
1569
9
mcontact
1280
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
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.