Magento 2: Как Создать УНИКАЛЬНОЕ КЛЮЧЕВОЕ поле в Пользовательской таблице


Я хочу создать пользовательский файл, скажем myname с УНИКАЛЬНЫМ КЛЮЧОМ ограничений в пользовательской таблице расширений.

В Magento1 мы можем определить так:

UNIQUE KEY `myname` (`myname`)

Как я могу сделать это в Magento2?

Author: Dhiren Vasoya, 2017-02-20

2 answers

Вы можете использовать тип индекса как \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE
Чтобы добавить уникальный ключ, используйте код

->addIndex(
    $installer->getIdxName(
        'YOUR_TABLE_NAME',
        ['YOUR_UNIQUE_FIELD_NAME'],
        \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE
    ),
    ['YOUR_UNIQUE_FIELD_NAME'],
    ['type' => \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE]
)

Вы можете добавить комбинацию нескольких столбцов как UNIQUE с,

->addIndex(
    $installer->getIdxName(
        'catalog_product_entity_datetime',
        ['entity_id', 'attribute_id', 'store_id'],
        \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE
    ),
    ['entity_id', 'attribute_id', 'store_id'],
    ['type' => \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE]
)

См. vendor\magento\module-catalog\Setup\InstallSchema.php

 21
Author: Jaimin Sutariya, 2017-02-20 06:22:40

В Magento 2.3 мы можем создать уникальный ключ, используя декларативную схему.

<?xml version="1.0"?>
<schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd">
    <table name="student" resource="default" engine="innodb" comment="Student Table">
        <column xsi:type="smallint" name="student_id" padding="6" unsigned="false" nullable="false" identity="true" comment="Student Id"/>
        <column xsi:type="varchar" name="roll_number" nullable="false" length="255" comment="Roll Number"/>
        <column xsi:type="varchar" name="student_name" nullable="true" comment="Student Name"/>
        <constraint xsi:type="primary" referenceId="PRIMARY">
            <column name="student_id"/>
        </constraint>
        <constraint xsi:type="unique" referenceId="STUDENT_ROLL_NUMBER">
            <column name="roll_number"/>
        </constraint>
    </table>
</schema>

Для получения более подробной информации см. https://devdocs.magento.com/guides/v2.4/extension-dev-guide/declarative-schema/db-schema.html

 1
Author: Pandurang, 2020-11-19 16:06:18