5

I want to add new column for table customer_entity and customer_grid_flat. please help me , how way to do it. thanks my code :

    ...
    InstallSchema:
        $eavTable = $installer->getTable('customer_entity');
        $columns = [
            'custom_field' => [
                'type' => \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
                'length' => '6',
                'nullable' => false,
                'default' => 0,
                'comment' => 'del flg',
                'after' => 'gender'
            ]
        ];
        foreach ($columns as $name => $definition) {
            $connection->addColumn($eavTable, $name, $definition);
        }
...
    InstallData:
...
            $customerSetup->addAttribute('customer', 'custom_field', [
                'type' => 'static',/* Data type in which formate your value save in database*/
                'label' => __('custom_field'),
                'input' => 'text',
                'visible' => false,
                'required' => false,
                'is_used_in_grid' => true,
                'is_visible_in_grid' => false,
                'is_filterable_in_grid' => false,
                'is_searchable_in_grid' => false
            ]);

            /**
             * @var EavSetupFactory $eavSetup
             */
            $attribute = $customerSetup->getEavConfig()->getAttribute('customer', 'custom_field');
            $attribute->setData('used_in_forms', [
                'adminhtml_customer'
            ]);
            $attribute->save();
    ...

I want to create the column customer_grid_flat.custom_field that get value from customer_entity.custom_field.

1 Answer 1

7

I find my solution here:
Step1:Create file your_module/etc/indexer.xml with content

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:Indexer/etc/indexer.xsd">
    <indexer id="customer_grid" view_id="dummy" class="Magento\Framework\Indexer\Action\Entity" primary="customer">
        <fieldset name="customer" source="Magento\Customer\Model\ResourceModel\Customer\Collection"
                  provider="Magento\Customer\Model\Indexer\AttributeProvider">
            <field name="custom_field" xsi:type="filterable" dataType="int"/>
        </fieldset>
    </indexer>
</config>

Step2: run command : php bin/magento indexer:reindex

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.