I am adding options to attribute programmatically as explained here http://webkul.com/blog/programmatically-add-options-attribute-magento2/.
What i want is to get the id of that attribute option to save it to my custom db table. How to achieve this?
thanks
Magento 2 – Get Last Added Attribute Option ID
magento2product-attribute
Related Solutions
Here is how I added Inventory text field for Drop-down custom option.
Create a module using following code -
app/code/MyCompany/MyModule/etc/module.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="MyCompany_MyModule" setup_version="1.0.0" />
</config>
app/code/MyCompany/MyModule/etc/adminhtml/di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\CustomOptions" type="MyCompany\MyModule\Ui\DataProvider\Product\Form\Modifier\CustomOptions" />
</config>
app/code/MyCompany/MyModule/Ui/DataProvider/Product/Form/Modifier/CustomOptions.php
<?php
/**
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace MyCompany\MyModule\Ui\DataProvider\Product\Form\Modifier;
use Magento\Catalog\Model\Locator\LocatorInterface;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Catalog\Model\ProductOptions\ConfigInterface;
use Magento\Catalog\Model\Config\Source\Product\Options\Price as ProductOptionsPrice;
use Magento\Framework\UrlInterface;
use Magento\Framework\Stdlib\ArrayManager;
use Magento\Ui\Component\Modal;
use Magento\Ui\Component\Container;
use Magento\Ui\Component\DynamicRows;
use Magento\Ui\Component\Form\Fieldset;
use Magento\Ui\Component\Form\Field;
use Magento\Ui\Component\Form\Element\Input;
use Magento\Ui\Component\Form\Element\Select;
use Magento\Ui\Component\Form\Element\Checkbox;
use Magento\Ui\Component\Form\Element\ActionDelete;
use Magento\Ui\Component\Form\Element\DataType\Text;
use Magento\Ui\Component\Form\Element\DataType\Number;
use Magento\Framework\Locale\CurrencyInterface;
class CustomOptions extends \Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\CustomOptions
{
/**#@+
* Field values
*
*/
const FIELD_QTY_NAME = 'quantity';
/**
* Get config for grid for "select" types
*
* @param int $sortOrder
* @return array
*/
protected function getSelectTypeGridConfig($sortOrder)
{
return [
'arguments' => [
'data' => [
'config' => [
'addButtonLabel' => __('Add Value'),
'componentType' => DynamicRows::NAME,
'component' => 'Magento_Ui/js/dynamic-rows/dynamic-rows',
'additionalClasses' => 'admin__field-wide',
'deleteProperty' => static::FIELD_IS_DELETE,
'deleteValue' => '1',
'renderDefaultRecord' => false,
'sortOrder' => $sortOrder,
],
],
],
'children' => [
'record' => [
'arguments' => [
'data' => [
'config' => [
'componentType' => Container::NAME,
'component' => 'Magento_Ui/js/dynamic-rows/record',
'positionProvider' => static::FIELD_SORT_ORDER_NAME,
'isTemplate' => true,
'is_collection' => true,
],
],
],
'children' => [
static::FIELD_TITLE_NAME => $this->getTitleFieldConfig(10),
static::FIELD_PRICE_NAME => $this->getPriceFieldConfig(20),
static::FIELD_PRICE_TYPE_NAME => $this->getPriceTypeFieldConfig(30, ['fit' => true]),
static::FIELD_SKU_NAME => $this->getSkuFieldConfig(40),
static::FIELD_SORT_ORDER_NAME => $this->getPositionFieldConfig(50),
static::FIELD_QTY_NAME => $this->getQtyFieldConfig(55),
static::FIELD_IS_DELETE => $this->getIsDeleteFieldConfig(60)
]
]
]
];
}
/**
* Get config for "Inventory" fields
*
* @param $sortOrder
* @param array $options
* @return array
*/
protected function getQtyFieldConfig($sortOrder, array $options = [])
{
return array_replace_recursive(
[
'arguments' => [
'data' => [
'config' => [
'label' => __('Inventory'),
'componentType' => Field::NAME,
'formElement' => Input::NAME,
'dataScope' => static::FIELD_QTY_NAME,
'dataType' => Text::NAME,
'sortOrder' => $sortOrder,
'validation' => [
'validate-digits' => true
],
],
],
],
],
$options
);
}
}
Add a column with name 'quantity' in Database table 'catalog_product_option_type_value' for storing the inventory value.
Hope this helps.
Based in the code of webkul.com you have these options:
Load Product
$product = $_objectManager->get('\Magento\Catalog\Model\Product')->load($id);
Custom Options
$customOptions = $_objectManager->get('Magento\Catalog\Model\Product\Option')->getProductOptionCollection($product);
Configurable Options
$productTypeInstance = $_objectManager->get('Magento\ConfigurableProduct\Model\Product\Type\Configurable');
$productAttributeOptions = $productTypeInstance->getConfigurableAttributesAsArray($product);
The last step is check based in Custom or Configurable Options if your option is created in product before and keep it.
Best Answer
At magento2, If you want a options then follow Marius answer https://magento.stackexchange.com/a/105171/4564
give list of options with value and label
here, $options->getValue(); is give u list option id of this attribute
Then using
krsort()
you can get last order id fro$OptionInarray
krsort($OptionInarray);
..Thenarray_values(krsort($OptionInarray))[0];
, we can get last id