Custom customer attribute not showing in admin customer grid table
-
10-04-2021 - |
سؤال
I have created an ph:Number customer attribute for the customer registration form . But now i am facing an issue in which that attribute in not showing in the back-end customer grid
the phone number attribute in the above picture is what i created and the code is mentioned below
Method in my Install Schema
public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{
$customField = "custom_field";
$customFieldLabel = "Phone Number";
$eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
$eavSetup->removeAttribute(Customer::ENTITY, $customField);
$attributeSetId = $eavSetup->getDefaultAttributeSetId(Customer::ENTITY);
$attributeGroupId = $eavSetup->getDefaultAttributeGroupId(Customer::ENTITY);
$eavSetup->addAttribute(Customer::ENTITY, $customField, [
// Attribute parameters
'type' => 'varchar',
'label' => $customFieldLabel,
'input' => 'text',
'required' => true,
'visible' => true,
'user_defined' => true,
'sort_order' => 990,
'position' => 990,
'system' => 0,
]);
$attribute = $this->eavConfig->getAttribute(Customer::ENTITY, $customField);
$attribute->setData('attribute_set_id', $attributeSetId);
$attribute->setData('attribute_group_id', $attributeGroupId);
$attribute->setData('used_in_forms', [
'adminhtml_customer',
'customer_account_create',
'customer_account_edit'
]);
$this->attributeResource->save($attribute);
}
This customer attribute is missing in the below grid
المحلول
Try Below way ..
you need to create etc/indexer.xml
with the following contents. In this example I'm adding mobile attribute and it's type is text (database column type)
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Indexer/etc/indexer.xsd">
<indexer id="customer_grid">
<fieldset name="customer">
<field name="custom_field" xsi:type="filterable" dataType="text" />
</fieldset>
</indexer>
</config>
While creating your attribute via InstallData.php
, 'is_used_in_grid' => 1
, should be set.
After all these code setup, you have to run bin/magento setup:upgrade
and then bin/magento indexer:reindex
نصائح أخرى
Hi Make below attribute as 1
is_used_in_grid: 1
is_visible_in_grid: 1
is_filterable_in_grid: 1
is_searchable_in_grid: 1
and then run indexer , after that it will display.
You can use CustomerSetupFactory to create customer attribute.
use Magento\Customer\Setup\CustomerSetupFactory; // add to construct also
$customerSetup = $this->customerSetupFactory->create(['setup' => $setup]);
$attributeSetId = $eavSetup->getDefaultAttributeSetId(Customer::ENTITY);
$attributeGroupId = $eavSetup->getDefaultAttributeGroupId(Customer::ENTITY);
$customerSetup->addAttribute(Customer::ENTITY, 'custom_field', [
// Attribute parameters
'type' => 'varchar',
'label' => 'Phone Number',
'input' => 'text',
'required' => true,
'visible' => true,
'user_defined' => true,
'sort_order' => 990,
'position' => 990,
'system' => 0,
]);
$attribute = $customerSetup->getEavConfig()->getAttribute(Customer::ENTITY, 'custom_field');
$attribute->setData('attribute_set_id', $attributeSetId);
$attribute->setData('attribute_group_id', $attributeGroupId);
$attribute->setData('used_in_forms', [
'adminhtml_customer',
'customer_account_create',
'customer_account_edit'
]);
//directly save the attribute.
$attribute->save();
Hope this will help you !!
<?php
namespace Vendor\Module\Setup\Patch\Data;
use Magento\Customer\Model\Customer;
use Magento\Customer\Setup\CustomerSetupFactory;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Framework\Setup\Patch\DataPatchInterface;
use Magento\Eav\Model\Entity\Attribute\SetFactory as AttributeSetFactory;
/**
* Class AddCustomerPhoneNumberAttribute
* @package Vendor\Module\Setup\Patch\Data
*/
class AddCustomerPhoneNumberAttribute implements DataPatchInterface
{
/**
* @var ModuleDataSetupInterface
*/
protected $moduleDataSetup;
/**
* @var CustomerSetupFactory
*/
protected $customerSetupFactory;
/**
* @var AttributeSetFactory
*/
protected $attributeSetFactory;
/**
* AddCustomerPhoneNumberAttribute constructor.
* @param ModuleDataSetupInterface $moduleDataSetup
* @param CustomerSetupFactory $customerSetupFactory
* @param AttributeSetFactory $attributeSetFactory
*/
public function __construct(
ModuleDataSetupInterface $moduleDataSetup,
CustomerSetupFactory $customerSetupFactory,
AttributeSetFactory $attributeSetFactory
){
$this->moduleDataSetup = $moduleDataSetup;
$this->customerSetupFactory = $customerSetupFactory;
$this->attributeSetFactory = $attributeSetFactory;
}
/**
* {@inheritdoc}
*/
public function apply()
{
$customerSetup = $this->customerSetupFactory->create(['setup' => $this->moduleDataSetup]);
$customerEntity = $customerSetup->getEavConfig()->getEntityType(Customer::ENTITY);
$attributeSetId = $customerEntity->getDefaultAttributeSetId();
$attributeSet = $this->attributeSetFactory->create();
$attributeGroupId = $attributeSet->getDefaultGroupId($attributeSetId);
$customerSetup->addAttribute(
Customer::ENTITY,
'phone_number',
[
'type' => 'varchar',
'label' => 'Phone Number',
'input' => 'text',
'validate_rules' => '{"max_text_length":255,"min_text_length":1}',
'required' => false,
'sort_order' => 120,
'position' => 120,
'visible' => true,
'user_defined' => true,
'unique' => false,
'system' => false,
]
);
$attribute = $customerSetup->getEavConfig()->getAttribute(
Customer::ENTITY,
'phone_number'
);
$attribute->addData(
[
'attribute_set_id' => $attributeSetId,
'attribute_group_id' => $attributeGroupId,
'used_in_forms' => ['adminhtml_customer', 'customer_account_create', 'customer_account_edit'],
]
);
$attribute->save();
}
/**
* {@inheritdoc}
*/
public static function getDependencies()
{
return [];
}
/**
* {@inheritdoc}
*/
public function getAliases()
{
return [];
}
}