I can remember a common issue on M1 when you update the db schema but for some reason it don't get updated into the schema cache and then it doesn't get effect for the resource models, in that situation what you used to do is flush cache but in the hard way (rm -rf var/cache/* var/full_page_cache/*), for M2 it should be enough running this:
rm -rf var/cache/* var/generation/* var/page_cache/* var/di && php -f bin/magento cache:flush && php -f bin/magento setup:upgrade
If this doesn't solve your problem then you will have to debug into the save function if your custom model have your custom field actually set, if it's not set then it could happen because the POST params are being set directly "hardcoded" (ex. $model->setProductId( $request->getParam('product_id') )->set... ) into the model instead to use setData, in that situation the only way you have for set your custom field without rewrite the controller is by using the save_before event of that custom model into your custom module:
Once you have your custom module defined (I think you should already have it because you need it for add the new field) do this:
events.xml:
<event name="NAMESPACE_MODEL_save_before">
<observer name="YOURNAMESPACE_CUSTOMMODULE::add_custom_value" instance="YOURNAMESPACE\CUSTOMMODULE\Observer\NamespaceModelSaveBefore" />
</event>
YOURNAMESPACE\CUSTOMMODULE\Observer\NamespaceModelSaveBefore.php:
<?php
namespace YOURNAMESPACE\CUSTOMMODULE\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\App\RequestInterface;
use Magento\Framework\Event\Observer;
/**
* Class NamespaceModelSaveBefore
*
* @package YOURNAMESPACE\CUSTOMMODULE\Observer
*/
class NamespaceModelSaveBefore implements ObserverInterface
{
/**
* @var RequestInterface|null
*/
protected $request = null;
/**
* NamespaceModelSaveBefore constructor.
*
* @param RequestInterface $request
*/
public function __construct(
RequestInterface $request
) {
$this->request = $request;
}
/**
* @param Observer $observer
*
* @return $this
*/
public function execute(Observer $observer)
{
$namespaceModel = $observer->getEvent()->getDataObject();
if ($customFieldValue = $this->request->getParam('YourCustomParam')) {
$namespaceModel->setCustomField($customFieldValue);
}
return $this;
}
}
Just in case, REMEMBER to replace all the NAMESPACE_MODEL, YOURNAMESPACE, CUSTOMMODULE, NamespaceModelSaveBefore, namespaceModel, YourCustomParam and setCustomField for what is needed for your case.
Kind Regards