I am trying to save data from a custom module with custom table, but the data is not saving.
For this I have written the code below.
setup
<?php
namespace Learning\ContactUS\Setup;
use Magento\Framework\Setup\InstallSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\DB\Ddl\Table;
class InstallSchema implements InstallSchemaInterface
{
/**
* Installs DB schema for a module
*
* @param SchemaSetupInterface $setup
* @param ModuleContextInterface $context
* @return void
*/
public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
{
$installer = $setup;
$installer->startSetup();
$table = $installer->getConnection()
->newTable($installer->getTable('contact_us'))
->addColumn('contact_us_id',Table::TYPE_SMALLINT,null,['identity' => true, 'nullable' => false, 'primary' => true],'Contact ID')
->addColumn('fullname', Table::TYPE_TEXT, 255, ['nullable' => true, 'default' => null])
->addColumn('company', Table::TYPE_TEXT, 255, ['nullable' => true, 'default' => null])
->addColumn('address', Table::TYPE_TEXT, 255, ['nullable' => false], 'Address')
->addColumn('city_state_zip_code', Table::TYPE_TEXT, 255, ['nullable' => false], 'City State Zip Code')
->addColumn('country', Table::TYPE_TEXT, 255, ['nullable' => false], 'Country')
->addColumn('phone', Table::TYPE_TEXT, 255, ['nullable' => false], 'Phone')
->addColumn('email', Table::TYPE_TEXT, 255, ['nullable' => false], 'Email')
->addColumn('Subject', Table::TYPE_TEXT, 255, ['nullable' => false], 'Subject')
->addColumn('content', Table::TYPE_TEXT, '2M', [], 'Content')
->addColumn('department', Table::TYPE_TEXT, 255, ['nullable' => false], 'Department')
->addColumn('creation_time', Table::TYPE_DATETIME, null, ['nullable' => false], 'Creation Time')
->addColumn('update_time', Table::TYPE_DATETIME, null, ['nullable' => false], 'Update Time')
->setComment('Contact US');
$installer->getConnection()->createTable($table);
$installer->endSetup();
}
}
Model
<?php
namespace Learning\ContactUS\Model;
class ContactUS extends \Magento\Framework\Model\AbstractModel
{
/**
* Initialize resource model
*
* @return void
*/
protected function _construct()
{
$this->_init('Learning\ContactUS\Model\ResourceModel\ContactUS');
}
}
Model/ResourceModel
<?php
namespace Learning\ContactUS\Model\ResourceModel;
class ContactUS extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
{
/**
* Initialize resource model
*
* @return void
*/
protected function _construct()
{
$this->_init('contactus', 'contact_us_id');
}
}
Model/ResourceModel/ContactUS/collection.php
<?php
namespace Learning\ContactUS\ResourceModel\ContactUS;
class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
{
/**
* @var string
*/
protected $_idFieldName = 'contact_us_id';
/**
* Define resource model
*
* @return void
*/
protected function _construct()
{
$this->_init('Learning\ContactUS\Model\ContactUS', 'Learning\ContactUS\Model\ResourceModel\ContactUS');
$this->_map['fields']['contact_us_id'] = 'main_table.contact_us_id';
}
}
Save.php
<?php
namespace Learning\ContactUS\Controller\Index;
class Save extends \Magento\Framework\App\Action\Action
{
/**
* @var \Magento\Framework\View\Result\PageFactory
*/
protected $resultPageFactory;
/**
* @var \Learning\ContactUS\Model\ContactUsFactory
*/
protected $contactUsFactory;
/**
* @var \Learning\ContactUS\Model\ContactUs
*/
protected $contactUS;
/**
* @param \Magento\Framework\App\Action\Context $context
* @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
* @param \Learning\ContactUS\Model\ContactUsFactory $contactUsFactory
* @param \Learning\ContactUS\Model\ContactUs $contactUs
*/
public function __construct(
\Magento\Framework\App\Action\Context $context,
\Magento\Framework\View\Result\PageFactory $resultPageFactory,
\Learning\ContactUS\Model\ContactUsFactory $contactUsFactory,
\Learning\ContactUS\Model\ContactUs $contactUs
)
{
$this->resultPageFactory = $resultPageFactory;
$this->contactUsFactory = $contactUsFactory;
$this->contactUS = $contactUs;
parent::__construct($context);
}
/**
* Default customer account page
*
* @return void
*/
public function execute()
{
/** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
$resultRedirect = $this->resultRedirectFactory->create();
try{
$request = $this->getRequest()->getParams();
$full_name = $request['fullname'];
$company = $request['company'];
$address = $request['address'];
$city_state = $request['city_state'];
$country = $request['country_id'];
$telephone = $request['telephone'];
$email = $request['email'];
$subject = $request['subject'];
$comment = $request['comment'];
$sales = $request['sales'];
$this->contactUS->setFullname($full_name);
$this->contactUS->setCompany($company);
$this->contactUS->setAddress($address);
$this->contactUS->setCityStateZipCode($city_state);
$this->contactUS->setCountry($country);
$this->contactUS->setPhone($telephone);
$this->contactUS->setEmail($email);
$this->contactUS->setSubject($subject);
$this->contactUS->setContent($comment);
$this->contactUS->setDepartment($sales);
$this->contactUsFactory->create()->save($this->contactUS);
$message = __('Thank you for Contact US one of the Employee will Contact you');
$this->messageManager->addSuccessMessage($message);
$this->resultPageFactory->create();
return $resultRedirect->setPath('contactus/index/index');
}catch (\Exception $e){
$this->messageManager->addException($e, __('We can\'t submit your request, Please try again.'));
$this->_objectManager->get('Psr\Log\LoggerInterface')->critical($e);
return $resultRedirect->setPath('contactus/index/index');
}
}
}
?>
Any help on this?