TEO*_*EOL 5 php doctrine mariadb symfony doctrine-orm
例如,我有这个简单的实体:
<?php
namespace App\Entity\Creator;
use App\Repository\Creator\ActivityContactRepository;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: ActivityContactRepository::class)]
#[ORM\Index(columns: ['contact_id'])]
class ActivityContact
{
#[ORM\Id]
#[ORM\ManyToOne(targetEntity: Activity::class, cascade: ['persist'])]
private Activity $activity;
#[ORM\Id]
#[ORM\Column(name: 'contact_id', type: 'integer')]
private int $contactId;
public function __construct(Activity $activity, int $contactId)
{
$this->activity = $activity;
$this->contactId = $contactId;
}
public function getActivity(): Activity
{
return $this->activity;
}
public function setActivity(Activity $activity): void
{
$this->activity = $activity;
}
public function getContactId(): int
{
return $this->contactId;
}
}
Run Code Online (Sandbox Code Playgroud)
当我生成“diff”迁移时,学说会自动创建一个查询来为“activity_id”列添加 MariaDB INDEX。
就我而言,该索引没有用,我想将其删除,而不仅仅是从迁移中删除它。
有没有办法指定不创建这个索引?
谢谢,
简短的回答:不,你不能。
由于您具有 ManyToOne 关系并且必须添加外键,因此正在创建 Activity_id 字段中的索引,这就是创建索引并在其上创建外键的原因,并且您无法撤消此行为。
然后,您将拥有一个包含 Activity_id 和 contact_id 的主索引,以及另一个带有外键的 Activity_id 索引。
是的,您可以使用主索引来保存外键,但原则不使用它(据我所知)。
如果你想删除这个索引,你必须删除ManyToOne关系。您可以创建一个名为 $activity_id 的字段,然后如果您想检索它,则必须手动获取活动实体。
不用担心它使用的内存,如果您有内存问题,我可以向您保证创建的索引不会是问题的根源。
另外,如果您正在使用学说迁移,请不要删除迁移文件中索引的创建,因为它将在您生成的每个差异上一次又一次地生成。
| 归档时间: |
|
| 查看次数: |
772 次 |
| 最近记录: |