I am new to Magento and trying to build a module. in my module, I have created a custom databse table which is successfully added to database now I want to add some data to the database table and I am getting following error.
Fatal error</b>: Uncaught Error: Call to a member function addData() on boolean in E:\xampp\htdocs\magento4\app\code\local\Wri\TodoHelper\controllers\IndexController.php:19
Stack trace:
#0 E:\xampp\htdocs\magento4\app\code\core\Mage\Core\Controller\Varien\Action.php(418): Wri_TodoHelper_IndexController->sayHelloAction()
#1 E:\xampp\htdocs\magento4\app\code\core\Mage\Core\Controller\Varien\Router\Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('sayHello')
#2 E:\xampp\htdocs\magento4\app\code\core\Mage\Core\Controller\Varien\Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#3 E:\xampp\htdocs\magento4\app\code\core\Mage\Core\Model\App.php(365): Mage_Core_Controller_Varien_Front->dispatch()
#4 E:\xampp\htdocs\magento4\app\Mage.php(683): Mage_Core_Model_App->run(Array)
#5 E:\xampp\htdocs\magento4\index.php(83): Mage::run('', 'store')
#6 {main}
thrown in <b>E:\xampp\htdocs\magento4\app\code\local\Wri\TodoHelper\controllers\IndexController.php</b> on line <b>19</b><br />
config.xml
<?xml version="1.0"?>
<config>
<modules>
<Wri_TodoHelper>
<version>1.0.0</version>
</Wri_TodoHelper>
</modules>
<global>
<helpers>
<wri_todohelper>
<class>Wri_TodoHelper_Helper</class>
</wri_todohelper>
</helpers>
<models>
<wri_todohelper>
<class>Wri_TodoHelper_Model</class>
<resourceModel>wri_todohelper_resource</resourceModel>
</wri_todohelper>
<wri_todohelper_resource>
<class>Wri_TodoHelper_Model_Resource</class>
<entities>
<todo> <!-- define an new entities for module -->
<table>wri_todohelper_lists</table> <!-- define table -->
</todo>
</entities>
</wri_todohelper_resource>
</models>
<blocks>
<wri_todohelper>
<class>Wri_TodoHelper_Block</class>
</wri_todohelper>
</blocks>
<resources>
<wri_todohelper_setup>
<setup>
<module>Wri_TodoHelper</module>
</setup>
</wri_todohelper_setup>
</resources>
</global>
<frontend>
<routers>
<Wri_TodoHelper_SayHello>
<use>standard</use>
<args>
<module>Wri_TodoHelper</module>
<frontName>todo</frontName>
</args>
</Wri_TodoHelper_SayHello>
</routers>
<layout>
<updates>
<custommodule>
<file>todohelper.xml</file>
</custommodule>
</updates>
</layout>
</frontend>
</config>
install-1.0.0.php
$tableName = $installer->getTable('wri_todohelper/todo');
if (!$connection->isTableExists($tableName)){
$table = $connection
->newTable($tableName)
->addColumn(
'id',
Varien_Db_Ddl_Table::TYPE_INTEGER,
null,
array(
'identity' => true,
'unsigned' => true,
'nullable' => false,
'primary' => true,
),
'ID'
)
->addColumn(
'task',
Varien_Db_Ddl_Table::TYPE_VARCHAR,
255,
array(
'nullable' => false,
),
'Task Name'
)->addColumn(
'status',
Varien_Db_Ddl_Table::TYPE_INTEGER,
10,
array(
'nullable' => false,
),
'Task Staus'
) ->addColumn(
'created_at',
Varien_Db_Ddl_Table::TYPE_DATETIME,
null,
array(
'nullable' => false,
),
'Created At'
);
$connection->createTable($table);
}
$installer->endSetup();
Todo.php
root/app/code/local/Wri/TodoHelper/Model/
<?php
class Wri_TodoHelper_Model_TodoHelper extends Mage_Core_Model_Abstract
{
public function _construct()
{
$this->_init('wri_todohelper/todo');
}
}
TodoHelper.php
root/app/code/local/Wri/TodoHelper/Model/Resource
<?php
class Wri_TodoHelper_Model_Resource_TodoHelper extends Mage_Core_Model_Resource_Db_Abstract
{
/**
* Initialize resource model
*
* @return void
*/
public function _construct()
{
$this->_init('wri_todohelper/todo', 'id');
}
}
?>
Collection.php
root/app/code/local/Wri/TodoHelper/Model/Resource/TodoHelper
<?php
class Wri_TodoHelper_Model_Resource_TodoHelper_Collection
extends Mage_Core_Model_Resource_Db_Collection_Abstract{
protected function _construct(){
parent::_construct();
$this->_init('wri_todohelper/todo');
}
}
IndexController.php
<?php
class Wri_TodoHelper_IndexController extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
echo 'Hello developer...';
}
public function sayHelloAction()
{
$taskname = $_REQUEST['todo'];
$status = $_REQUEST['todo'];
$response = '';
if ($taskname && $status){
$data = array('task'=>$taskname, 'status'=> $status);
$model = Mage::getModel('wri_todohelper/todo')->addData($data);
try {
$model->save(); //save data
$insertId = $model->getId();
$response->status = "success";
$response->data = "Data successfully inserted. Insert ID: " . $insertId;
echo $response;
} catch (Exception $e) {
$response->status = "failed";
$response->data = $e->getMessage();
echo $response;
}
}else{
$response->status = "failed";
$response->data = "Not Found";
echo $response;
}
}
}
?>
Please Help !!!
Best Answer
Just adding it here so this question can be closed:
Probably due to the modifications @Priyank has suggested the class name has not been updated accordingly by the questioner:
app/code/local/Wri/TodoHelper/Model/Todo.php
must inherit a class with the nameWri_TodoHelper_Model_Todo
rather thanWri_TodoHelper_Model_TodoHelper
because else the class will not be loaded.