Magento CE 2.2.0; I created CRUD for model 'people' and save data in to database by controller for testing.
While i try to save by using controllor Add:
$_person = $this->_objectManager->create(\MagePro\Contacts\Model\People::class);
$_person->setName($person[PeopleTable::NAME]);
$_person->setSex($person[PeopleTable::SEX]);
$_person->save();
This process will meet error:
Magento\Framework\Exception\LocalizedException: Invalid method
MagePro\Contacts\Model\People::_getResource in /home/dev-
72/Work/Magento/Web/www/vendor/magento/framework/DataObject.php:395
Stack trace:
#0 /home/dev- 72/Work/Magento/Web/www/vendor/magento/framework/Model/AbstractModel.php(647): Magento\Framework\DataObject->__call('_getResource', Array)
#1 /home/dev-72/Work/Magento/Web/www/app/code/MagePro/Contacts/Controller/People/Add.php(44): Magento\Framework\Model\AbstractModel->save()
#2 /home/dev-72/Work/Magento/Web/www/app/code/MagePro/Contacts/Controller/People/Add.php(25): MagePro\Contacts\Controller\People\Add->generatePerson('name', 'sex')
#3 /home/dev-72/Work/Magento/Web/www/generated/code/MagePro/Contacts/Controller/People/Add/Interceptor.php(24): MagePro\Contacts\Controller\People\Add->execute()
#4 /home/dev-72/Work/Magento/Web/www/vendor/magento/framework/App/Action/Action.php(107): MagePro\Contacts\Controller\People\Add\Interceptor->execute()
People Model:
<?php
namespace MagePro\Contacts\Model;
use Magento\Framework\Model\AbstractModel;
class People extends AbstractModel
{
public function __construct()
{
$this->_init(\MagePro\Contacts\Model\ResourceModel\People::class);
}
}
People Resource Model:
<?php
namespace MagePro\Contacts\Model\ResourceModel;
use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
use MagePro\Contacts\Model\ConstantValue\DataTable as TablePeople;
class People extends AbstractDb
{
public function _construct()
{
$this->_init(TablePeople::TABLE_PEOPLE, TablePeople::ID);
}
}
Constant People Table:
<?php
namespace MagePro\Contacts\Model\ConstantValue;
class DataTable
{
const TABLE_PEOPLE = 'tb_people';
const ID = 'id';
const NAME = 'name';
const SEX = 'sex';
}
InstallSchema
class InstallSchema implements \Magento\Framework\Setup\InstallSchemaInterface
{
public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
{
$setup->startSetup();
$this->createPeopleTable($setup);
$setup->endSetup();
}
private function createPeopleTable($setup)
{
if ($this->isExist($setup, PeopleTable::TABLE_PEOPLE)) {
return;
}
$table = $setup->getConnection()->newTable($setup->getTable(PeopleTable::TABLE_PEOPLE)
)->addColumn(
PeopleTable::ID,
DDL::TYPE_INTEGER,
null,
['identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true]
)->addColumn(
PeopleTable::NAME,
DDL::TYPE_TEXT,
null,
['identity' => false, 'unsigned' => true, 'nullable' => true, 'primary' => false]
)->addColumn(
PeopleTable::SEX,
DDL::TYPE_TEXT,
null,
['identity' => false, 'unsigned' => true, 'nullable' => true, 'primary' => false]
)->setComment(
'Contacts Table'
)->setOption(
'type', 'InnoDB'
)->setOption('charset', 'utf8');
return $setup->getConnection()->createTable($table);
}
private function isExist($setup, $tableName)
{
if($setup->getConnection()->isTableExists($setup->getTable($tableName))){
return true;
}
return false;
}
}