読み込みが終了しない場合は、しばらく待つか、リロードを行なってください。
If loading does not finish, wait for a while or reload.
エンジニア向けの情報を発信するブログです。
どなたでも発信できます。
お好きに利用していただれば幸いです。

<?php
/**
* @Entity
* 👇これ
* @Table(name="ecommerce_products",indexes={
* @Index(name="search_idx", columns={"name", "email"})
* })
*/
class ECommerceProduct
{
}
bin/console doctrin:schema:update --force
📁 ec-cube/app/Customize/Entity/MyTrait.php
<?php
namespace Customize\Entity;
use Doctrine\ORM\Mapping as ORM;
use Eccube\Annotation\EntityExtension;
/**
* @EntityExtension("Eccube\Entity\ProductClass")
*/
trait MyTrait
{
/**
* @var string
* @ORM\Column("some_field", type="string")
*/
protected $someField;
public function setSomeField(string $someField): self
{
$this->someField = $someField;
return $this;
}
public function getSomeField(): string
{
return $this->someField;
}
}
📁 ec-cube/app/Customize/EventListener/MyEntityListener.php
<?php
namespace Customize\EventListener;
use Customize\Entity\MyTrait;
use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
class MyEntityListener implements EventSubscriber
{
public function getSubscribedEvents()
{
return [
'loadClassMetadata',
];
}
public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs)
{
$cm = $eventArgs->getClassMetadata();
$class = $cm->getName();
$uses = class_uses($class);// 👈 traitを作成している場合、この$usesに作成したtraitのpath?が入ってくる
if (in_array(MyTrait::class, $uses)) {
$cm->table['indexes'][] = [// 👈 これでインデックスを追加することができる
'columns' => [
'some_field',
],
];
}
}
}
bin/console doctrin:schema:update --force