3

(Sorry if my english is bad, but is not my language)

My Magento version is 1.9.3.8

I have a custom module that get data when a costumer make an order. I have no problems to get all the information and put all in a json (all works here).

Now i am try to insert that json and order id in a custom table, but when I try to insert i have this error a below:

eSQLSTATE[42000]: Syntax error or access violation: 1103 Incorrect table name '', query was: INSERT INTO `` () VALUES ()

Here my code.

config.xml (Mage/Shop/etc/config.xml)

<config>
 <modules>
 <Mage_Shop>
 <version>0.0.1</version>
 </Mage_Shop>
 </modules>
 <global> 
 <models>
 <mage_shop>
 <class>Mage_Shop_Model</class>
 <resourceModel>Shop_mysql4</resourceModel>
 </mage_shop>
 <mage_shop_mysql4>
 <class>Mage_Shop_Model_Mysql4</class>
 <entities>
 <mage_shop>
 <table>order_logs</table>
 </mage_shop>
 </entities>
 </mage_shop_mysql4>
 </models>
 <resources>
 <mage_shop_setup>
 <setup>
 <module>Mage_Shop</module>
 </setup>
 <connection>
 <use>core_setup</use>
 </connection>
 </mage_shop_setup>
 <mage_shop_write>
 <connection>
 <use>core_write</use>
 </connection>
 </mage_shop_write>
 <mage_shop_read>
 <connection>
 <use>core_read</use>
 </connection>
 </mage_shop_read>
 </resources> 
 <models>
 <mage_shop>
 <class>Mage_Shop_Model</class>
 </mage_shop>
 </models>
 <helpers>
 <mage_shop>
 <class>mage_shop_Helper</class>
 </mage_shop>
 </helpers>
 <events>
 <sales_order_place_after>
 <observers>
 <mage_shop>
 <class>mage_shop/observer</class>
 <method>logUpdate</method>
 <type>model</type>
 </mage_shop>
 </observers>
 </sales_order_place_after> 
 </events>
 </global>
</config>

I ignore <frontend> and <block> because I dont want to show nothing in backend or in front.

IndexController.php (Mage/Shop/controllers/IndexController.php)

<?php
class Mage_Shop_IndexController extends Mage_Core_Controller_Front_Action
 {
 public function indexAction()
 {
 $this->loadLayout();
 $this->renderLayout();
 }
}

Shop.php (Mage/Shop/Model/Shop.php)

<?php
class Mage_Shop_Model_Shop extends Mage_Core_Model_Abstract
{
 public function _construct()
 {
 parent::_construct();
 $this->_init('shop/order_logs');
 }
}

Shop.php (Mage/Shop/Model/Mysql4/Shop.php)

<?php
class Mage_Shop_Model_Mysql4_Shop extends Mage_Core_Model_Mysql4_Abstract
{
 public function _construct()
 {
 $this->_init('shop/logs', 'order_id');
 }
}

Collection.php (Mage/Shop/Model/Mysql4/Shop/Collection.php)

<?php
class Mage_Shop_Model_Mysql4_Shop_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
{
 public function _construct()
 {
 //parent::__construct();
 $this->_init('shop/order_logs');
 }
}

mysql4-install-0.1.0.php (Mage/Shop/sql/shop_setup/mysql4-install-0.1.0.php)

<?php
$installer = $this;
$installer->startSetup();
$installer->run("
 — DROP TABLE IF EXISTS {$this->getTable('order_logs')};
 CREATE TABLE {$this->getTable('order_logs')} (
 `order_id` int(20),
 `array_log` json,
 PRIMARY KEY (`order_id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
");
$installer->endSetup();

Insert code in Observer.php (Mage/Shop/Model/Observer.php)

$connW = $coreResource->getConnection('core_write');
 $connW->insert()
 ->into($coreResource->getTableName('order_logs'))
 ->columns(array('order_id','array_log'))
 ->values(array('order_id' => $order_id, 
 'array_log' => $content //$content is json 
 )
 );

I followed this: https://magento2.atlassian.net/wiki/spaces/m1wiki/pages/14024903/Create+a+custom+module+with+a+custom+database+table

asked Jun 29, 2018 at 11:58

2 Answers 2

5

Please change your observer code as below for enter record in table:

$order_id = "some recoed";
$content = "some content";
$resource = Mage::getSingleton('core/resource');
$writeConnection = $resource->getConnection('core_write');
$query = "INSERT INTO `order_logs` (`order_id`,`array_log`) VALUES ('.$order_id.', '.$content.')";
$writeConnection->query($query);
answered Jun 29, 2018 at 13:39
2
  • Sorry for the delay but I can't try it on the weekend. It works perfectly, thank! Commented Jul 2, 2018 at 7:48
  • @Exe Happy to hear your problem solved. Enjoy :) Commented Jul 2, 2018 at 10:43
4

To extend on @Chirag's answer, it should also work to use:

$this->getTable('mage_gextorshop');

...because this is the identifier in the config.xml file.

However, I don't understand why you define an entity and don't use it afterwards. You should also be able to do this:

$log = Mage::getModel('mage_gextorshop/gextorshop');
$log->setOrderId($myOrderId)->setArrayLog($json)->save();
answered Jun 29, 2018 at 13:48

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.