質問 > 管理機能 > 独自追加したカラムにインデックス付加する方法 |
管理機能
スレッド表示 | 古いものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
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 でまた消えちゃいますね
|
gau |
投稿日時: 2022/11/14 20:18
対応状況: −−−
|
新米 登録日: 2016/1/31 居住地: 投稿: 6 |
Re: 独自追加したカラムにインデックス付加する方法 それ、いいですね
|
mcontact |
投稿日時: 2022/11/14 15:10
対応状況: −−−
|
神 登録日: 2022/1/22 居住地: 投稿: 1298 |
Re: 独自追加したカラムにインデックス付加する方法 dtb_orderテーブルへのカラム追加であればEntityファイルのtraitでの拡張を行い、
dtb_orderテーブルへのインデックス追加であれば、マイグレーションでの追加が良いと思います。 https://jum11.com/2021/09/21/ec-cube4-migration-basic/ |
gau |
投稿日時: 2022/11/14 13:37
対応状況: −−−
|
新米 登録日: 2016/1/31 居住地: 投稿: 6 |
Re: 独自追加したカラムにインデックス付加する方法 * @ORM\Column(name="hoge", type="string", length=255, nullable=true, unique=true)
これでユニークキーが付くのですが、日時だと同じものが発生してだめかも |
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 よろしくお願いいたします。 |
スレッド表示 | 古いものから | 前のトピック | 次のトピック | トップ |