Php 在原则2中,如何将列标记为非主键?

Php 在原则2中,如何将列标记为非主键?,php,mysql,doctrine-orm,doctrine,Php,Mysql,Doctrine Orm,Doctrine,我已经在数据库中创建了一个表,其中有两个键,一个是PRI键,另一个是MUL键。我如何告诉条令以MUL键作为键标记列?如果我理解正确,@ID将不起作用,因为它不是主键,@Index将不起作用,因为表已经创建 当前代码如下所示: /** * @ORM\Entity * @ORM\Table(name="mytablename") **/ class MyTablename implements IMyTablename { /** * @ORM\Id * @ORM\

我已经在数据库中创建了一个表,其中有两个键,一个是PRI键,另一个是MUL键。我如何告诉条令以MUL键作为键标记列?如果我理解正确,@ID将不起作用,因为它不是主键,@Index将不起作用,因为表已经创建

当前代码如下所示:

/**
 * @ORM\Entity
 * @ORM\Table(name="mytablename")
 **/
class MyTablename implements IMyTablename
{
    /**
     * @ORM\Id
     * @ORM\Column(type="string", name="id", length=40)
     */
    protected $id;

    /**
     * @ORM\Column(type="string", name="ccode", length=5)
     */
    protected $ccode;

    ...

}

我想把ccode标记为一个键。

条令允许您通过注释定义索引(自条令2.5以来的唯一、索引甚至全文)。由于主键在每个实体上都是必需的,因此它有一个特殊的注释。就这些


但是,既然你在问题中已经提到了它,我想对于MUL-key所扮演的真正角色(即基本索引)存在误解。特别是,这种类型的索引只涉及性能,实体无法要求它正常工作(当然性能问题除外)。我鼓励您阅读更多关于索引的文献或澄清您的问题。

条令允许您通过注释定义索引(独特、索引,甚至自条令2.5以来的全文)。由于主键在每个实体上都是必需的,因此它有一个特殊的注释。就这些


但是,既然你在问题中已经提到了它,我想对于MUL-key所扮演的真正角色(即基本索引)存在误解。特别是,这种类型的索引只涉及性能,实体无法要求它正常工作(当然性能问题除外)。我鼓励您阅读更多有关索引的文献或澄清您的问题。

如果您不想让Doctrine的SchemaTool管理您的表架构,那么将索引指示给Doctrine有什么意义?条令就是不使用这些信息。@marc你什么意思?我不熟悉Doctrine如何使用ID标记,但我知道即使在创建了表之后,它也会使用列标记来解析表中的输入,例如date vs datetime。您能否详细说明一下“@Index将无法工作,因为表已经创建”@marc我的理解是,我可以使用“@Index”来设置多个键,但“@Index”仅用于表格生成是的,您是对的。在表创建时,SchemaTool使用您的注释在指定列上添加索引。在此之后,DBMS将在某些请求期间利用它,但仅此而已。您还需要从条令中获得什么?如果您不希望条令的SchemaTool管理您的表模式,那么向条令指示索引有什么意义?条令就是不使用这些信息。@marc你什么意思?我不熟悉Doctrine如何使用ID标记,但我知道即使在创建了表之后,它也会使用列标记来解析表中的输入,例如date vs datetime。您能否详细说明一下“@Index将无法工作,因为表已经创建”@marc我的理解是,我可以使用“@Index”来设置多个键,但“@Index”仅用于表格生成是的,您是对的。在表创建时,SchemaTool使用您的注释在指定列上添加索引。在此之后,DBMS将在某些请求期间利用它,但仅此而已。你还在等什么呢?你能给我指一下上述文献吗?我读过的条令文档中没有提到这些。你会发现不同索引的书面描述很好。如果您想了解更多详细信息,MySQL官方文档中有一节专门介绍。谢谢。需要明确的是,您是说无法为已创建的表定义非主索引,对吗?由于SchemaTool update命令:
php-Doctrine-orm:schema-tool:update
,条令在创建表后仍然可以修改表。请注意,不推荐在生产中使用,请参阅。您能为我指出上述文献吗?我读过的条令文档中没有提到这些。你会发现不同索引的书面描述很好。如果您想了解更多详细信息,MySQL官方文档中有一节专门介绍。谢谢。需要明确的是,您是说无法为已创建的表定义非主索引,对吗?由于SchemaTool update命令:
php-Doctrine-orm:schema-tool:update
,条令在创建表后仍然可以修改表。请注意,不建议在生产中使用,请参阅。