Question

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?

Was it helpful?

Solution

Replace below code:

            $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);

To:

 $contactUs = $this->contactUsFactory->create();
        $contactUs->setFullname($full_name);
        $contactUs->setCompany($company);
        $contactUs->setAddress($address);
        $contactUs->setCityStateZipCode($city_state);
        $contactUs->setCountry($country);
        $contactUs->setPhone($telephone);
        $contactUs->setEmail($email);
        $contactUs->setSubject($subject);
        $contactUs->setContent($comment);
        $contactUs->setDepartment($sales);
        $contactUs->save();

EDIT:

Your namespace wrong for collection

namespace Learning\ContactUS\ResourceModel\ContactUS;

change to

namespace Learning\ContactUS\Model\ResourceModel\ContactUS;

OTHER TIPS

try it like this:

<?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;

    /**
     * @param \Magento\Framework\App\Action\Context $context
     * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
     * @param \Learning\ContactUS\Model\ContactUsFactory $contactUsFactory
     */
    public function __construct(
        \Magento\Framework\App\Action\Context $context,
        \Magento\Framework\View\Result\PageFactory $resultPageFactory,
        \Learning\ContactUS\Model\ContactUsFactory $contactUsFactory,
    )
    {
        $this->resultPageFactory = $resultPageFactory;
        $this->contactUsFactory = $contactUsFactory;
        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'];

            $contactUs = $this->contactUsFactory->create();
            $contactUs->setFullname($full_name);
            $contactUs->setCompany($company);
            $contactUs->setAddress($address);
            $contactUs->setCityStateZipCode($city_state);
            $contactUs->setCountry($country);
            $contactUs->setPhone($telephone);
            $contactUs->setEmail($email);
            $contactUs->setSubject($subject);
            $contactUs->setContent($comment);
            $contactUs->setDepartment($sales);

            $contactUs->save();


            $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');
        }

    }

}
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top