প্রোগ্রামেমেজেন্টোতে বিদ্যমান টেবিলে কীভাবে নতুন কলাম যুক্ত করবেন?


23

ইনস্টল স্ক্রিপ্টের মাধ্যমে আমি কীভাবে বিদ্যমান ম্যাজেন্টো কোর টেবিলটিতে একটি নতুন কলাম যুক্ত করতে পারি? (খাঁটি এসকিউএল ব্যবহার না করে)

আমি ম্যাগেন্টো উপায়টি ব্যবহার করতে চাই যা ইনস্টল স্ক্রিপ্ট তৈরির জন্য উলাম পদ্ধতিগুলি ব্যবহার করছে।

এখনও অবধি আমি কয়েকটি টিউটোরিয়াল অনুসরণ করেছি। তবে মনে হচ্ছে ঠিক মতো কাজ করছে না। এসকিউএল উত্তর ব্যবহার না করে ম্যাজেন্টো সেটআপ স্ক্রিপ্টে এই স্ট্যাকওভারফ্লো অল্টার টেবিলে আমার প্রশ্নের কিছুটা মিল ছিল। তবে বিষয়বস্তুটি মডিউলের confg.xmlফাইলের মধ্যে কী রাখা উচিত ? আমার কি কেবলমাত্র সংস্থান মডেল, মডেল এবং সেটআপ ডেটা যথেষ্ট পরিমাণে সংজ্ঞায়িত করতে হবে?

config.xml(আমার মডিউলটির) সম্পর্কিত অংশটি নিম্নরূপ as

<config>
 . . . 
<global>
        <models>
            <mymodule>
                <class>Mynamespace_Mymodule_Model</class>
                <resourceModel>mymodule_resource</resourceModel>
            </mymodule>
            <mymodule_resource>
                <class>Mynamespace_Mymodule_Model_Resource</class>
            </mymodule_resource>
        </models>
        <resources>
            <mymodule_setup>
                <setup>
                    <module>Mynamespace_Mymodule</module>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </mymodule_setup>
            <mymodule_read>
                <connection>
                    <use>core_read</use>
                </connection>
            </mymodule_read>
            <mymodule_write>
                <connection>
                    <use>core_write</use>
                </connection>
            </mymodule_write>
        </resources>
. . . .
</config>

এবং আমার ইনস্টল স্ক্রিপ্টটি নীচে রয়েছে।

$installer = $this;
$installer->startSetup();

$installer->getConnection()
        ->addColumn($installer->getTable('sales_flat_order'),'custom_value', Varien_Db_Ddl_Table::TYPE_VARCHAR, 255, array(
        'nullable'  => false,
), 'Title');
$installer->endSetup();

তবে আমি নিম্নলিখিত ত্রুটি পাচ্ছি।

এসকিউএলসেট [42S02]: বেস টেবিল বা ভিউ পাওয়া যায় নি: 1146 সারণী '255.sles_flat_order' বিদ্যমান নেই

এটি ঠিক করার জন্য যে কোনও পরামর্শই প্রশংসিত হবে।



কোন। ডাটাবেস নাম অন্য কিছু।
সুকেশিনী

উত্তর:


44

sales_flat_orderএর পুরো নাম tableএবং তাই আপনাকে ব্যবহারের জন্য উপন্যাসটি ব্যবহার করতে হবে$installer->getTable()

ইন $installer->getTable()মত পরামিতিmodule_alias/table_alias.

সেক্ষেত্রে চেষ্টা করুন

$installer->getTable('sales/order')

আপনি যখন এটি লিখবেন এটি টেবিলের নাম ফিরে আসবে sales_flat_order

কারণ

module_alias = sales

table_alias = order

সম্পাদনা

নতুন কলাম যুক্ত করতে আপনি নীচের স্ক্রিপ্টটি ব্যবহার করতে পারেন। এটি আমার সিস্টেমে কাজ করে

$installer = $this;
$installer->startSetup();

$installer->getConnection()
->addColumn($installer->getTable('sales/order'),'custom_value', array(
    'type'      => Varien_Db_Ddl_Table::TYPE_TEXT,
    'nullable'  => false,
    'length'    => 255,
    'after'     => null, // column name to insert new column after
    'comment'   => 'Title'
    ));   
$installer->endSetup();

আমি ব্যবহার করছি Varien_Db_Ddl_Table::TYPE_TEXTএর insted Varien_Db_Ddl_Table::TYPE_VARCHARকারণ TYPE_VARCHARঅবচিত

তুমি পরীক্ষা করে দেখতে পারো @ Varien_Db_Adapter_Pdo_Mysql::$_ddlColumnTypes

এবং যদি আপনি প্রকার নির্দিষ্ট করে থাকেন TYPE_TEXTতবে দৈর্ঘ্য নির্ধারণ করে দেন 255ম্যাগেন্টো টাইপের একটি MySQLকলাম তৈরি করবে VARCHAR


এটি চেষ্টা করেও, যদিও আমি একই প্রতিক্রিয়া
পাচ্ছি

@ সুকেশিনী আমার সম্পাদনাটি পরীক্ষা করুন ....
কিয়ুর শাহ

আপনাকে অনেক ধন্যবাদ. আপনি আমার সমস্যা সমাধানের জন্য যে প্রচেষ্টা করেছেন তা এটি পুরোপুরি এবং +1 কাজ করে।
সুকেশিনী

এটি শুনে আপনারা সুকসিনী
কিউর শাহ

@ কেয়ারশাহ কীভাবে কাস্টম টেবিলের সাথে একটি নতুন ক্ষেত্র যুক্ত করবেন?
প্রজাপতি

5

আপনি পদ্ধতিটির অপব্যবহার করছেন addColumn:

public function addColumn($tableName, $columnName, $definition, $schemaName = null)

চতুর্থ প্যারামিটারটি হ'ল স্কিমা নাম, আপনার কলে, চতুর্থ প্যারামিটার 255

->addColumn($installer->getTable('sales_flat_order'),'custom_value', Varien_Db_Ddl_Table::TYPE_VARCHAR, 255, array(
    'nullable'  => false,
), 'Title')

আপনি যদি সঠিক পরামিতি ব্যবহার করেন তবে এটি কাজ করা উচিত।


1
TYPE_VARCHAR হ্রাস করা হয়েছে সুতরাং ভেরেন_ডিবি_এডাপ্টার_পডো_মাইএসকিএল :: $ _ ডিডিএলকলাম টাইপস per অনুযায়ী, আমাদের টিওয়াইপিকুলার ব্যবহার করতে হবে, আমি ভুল হলে আমাকে সংশোধন করুন। @ ফ্যাবিয়ান
কিয়ুর শাহ

তুমি ঠিক. একটি দৈর্ঘ্যের সাথে টিওয়াইপুলিয়র <255 স্বয়ংক্রিয়ভাবে একটি বার্চারের সর্বোচ্চ।
ফ্যাবিয়ান ব্ল্যাচসমিডট

@ ফ্যাবিয়ান ব্লাচস্মিড্ট: মিস করা জায়গাগুলি নির্দেশ করার জন্য ধন্যবাদ। এবং +1
সুকেশিনী 4'15

4

আমি বুঝতে পেরেছি যে এটি তুলনামূলকভাবে 'পুরানো' প্রশ্ন, তবে গুগলের দ্বারা এটি এখনও বেশ সন্ধানযোগ্য, আমি এই বিটটি তথ্য যুক্ত করার সিদ্ধান্ত নিয়েছি।

আপনার প্রশ্নের বিষয়ে, আপনি যদি বিক্রয় / অর্ডার সারণী পরিবর্তন করতে চান তবে এটি প্রথাগত ইনস্টল স্ক্রিপ্ট / সেটআপ দ্বারা করা উচিত নয় by Mage_Catalogমডিউল একটি ভিন্ন ব্যবহার Resource_Setupবর্গ, যথা Mage_Sales_Model_Resource_Setup

আপনি যদি বিক্রয় / অর্ডার মডেলটিতে বৈশিষ্ট্যগুলি যুক্ত করতে চান, যাতে সবকিছু যুক্ত করা এবং সঠিকভাবে প্রক্রিয়া করা হয় তা নিশ্চিত করতে, আপনার বৈশিষ্ট্যটি এই জাতীয়ভাবে যুক্ত করুন:

<?php

// Start setup
/** @var Mage_Sales_Model_Resource_Setup $installer */
$installer = new Mage_Sales_Model_Resource_Setup('core_setup');
$installer->startSetup();

// Gather info
$entityType = 'order'; // Adding attribute to this entity type (must be written out in text, not the entity type ID!! That'll not work.
$attributeName = 'my_attribute_code'; // Your attribute code/name

// Add attribute, very few parameters are accepted.
$installer->addAttribute($entityType, $attributeName, array(
    'type'              => 'varchar'
));

// End setup
$installer->endSetup();

আপনি আশ্চর্য উচিত কেন , তারপর উত্তর মধ্যে addAttribute()এর ফাংশন Mage_Sales_Model_Resource_Setupশ্রেণী:

/**
 * Add entity attribute. Overwrited for flat entities support
 *
 * @param int|string $entityTypeId
 * @param string $code
 * @param array $attr
 * @return Mage_Sales_Model_Resource_Setup
 */
public function addAttribute($entityTypeId, $code, array $attr)
{
    if (isset($this->_flatEntityTables[$entityTypeId]) &&
        $this->_flatTableExist($this->_flatEntityTables[$entityTypeId]))
    {
        $this->_addFlatAttribute($this->_flatEntityTables[$entityTypeId], $code, $attr);
        $this->_addGridAttribute($this->_flatEntityTables[$entityTypeId], $code, $attr, $entityTypeId);
    } else {
        parent::addAttribute($entityTypeId, $code, $attr);
    }
    return $this;
}

ভাল ক্যাচ .. কখনই জানি না যে আমরা addAttributeবিক্রয়_অর্ডার মডিউলটির জন্য ব্যবহার করতে পারি
রাজীব কে টমি

এটি আসলে সবচেয়ে সঠিক উত্তর।
চমত্কার

আমি $thisইনস্টলার ব্যবহার করছি , আপনার উত্তর আমাকে সঠিক দিক নির্দেশ করেছে। তোমাকে অনেক ধন্যবাদ!
ডাঃ জিয়ানলুইগি জেন ​​জ্যানেটিিনি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.