ম্যাজেন্টো 2: কীভাবে ডাটাবেস স্কিমা আপগ্রেড করবেন


29

আমি ম্যাজেন্টো কাস্টম মডিউল নিয়ে কাজ করছি, মডিউলে Setup\InstallSchema.phpফাইল রয়েছে যা আগে ইনস্টল করা আছে। আমি এতে আরও কয়েকটি ডাটাবেস ক্ষেত্র যুক্ত করেছি InstallSchema.phpযাতে আমি টেবিলের কাঠামো আপডেট করতে চাই তবে টেবিলটি কোনও পরিবর্তন প্রয়োগ করে নি।

আমি কীভাবে ডাটাবেস সারণিতে স্কিমা পরিবর্তনগুলি প্রয়োগ করতে পারি?

আমার কাছে স্কিমা আপডেট করার প্রক্রিয়া ক্লাইম কমান্ড রয়েছে তবে সাফল্য নয়।

php bin/magento setup:db-schema:upgrade

এবং

php bin/magento setup:upgrade

আপনি "পিএইচপি বিন / ম্যাজেন্টো মডিউল: আনইনস্টল" দিয়ে আনইনস্টল করতে পারেন এবং আবার আপনার এক্সটেনশনটি ইনস্টল করতে পারেন। এটির আপগ্রেডশেমিএএফপি যাচাই করার জন্য আরেকটি বিষয় github.com/magento/magento2/commit/… মনে হচ্ছে এই মুহুর্তে এখানে ডেটা বেস আপগ্রেড করার কোনও পরিষ্কার ব্যাখ্যা নেই, তাই আমি এখানে উত্তরও সঠিকভাবে অপেক্ষায়
রয়েছি

উত্তর কোডের নীচে @ ফায়ারবার অ্যাপি?
সুরেশ চিকানী

এখনও চেষ্টা করবেন না, তবে ক্যাটালগ কোর মডিউল github.com/magento/magento2/blob/…
ফায়ারবার

বেশিরভাগ সময়, ত্রুটিটি ক্লাসের জন্য একটি নির্ধারিত নেমস্পেস না থাকার কারণে আসে। আপনি আপনার শ্রেণীর জন্য একটি নেমস্পেস সংজ্ঞায়িত করেছেন তা পরীক্ষা করে দেখুন।
স্যুকাইন

উত্তর:


48

আপনি যদি আপনার মডিউলটির বিদ্যমান সারণিতে আরও কলাম যুক্ত করতে চান তবে নিম্নলিখিতগুলি করতে পারেন।

পদক্ষেপ 1: সেটআপ ফোল্ডারের অধীনে আপগ্রেডশ্মিমা.এফপি তৈরি করুন। নিম্নলিখিত কোড থেকে আইডিয়া পান।

namespace Vendor\ModuleName\Setup;

use Magento\Framework\Setup\UpgradeSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
class UpgradeSchema implements  UpgradeSchemaInterface
{
    public function upgrade(SchemaSetupInterface $setup,
                            ModuleContextInterface $context){
        $setup->startSetup();
        if (version_compare($context->getVersion(), '1.0.1') < 0) {

            // Get module table
            $tableName = $setup->getTable('table_name');

            // Check if the table already exists
            if ($setup->getConnection()->isTableExists($tableName) == true) {
                // Declare data
                $columns = [
                    'imagename' => [
                        'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
                        'nullable' => false,
                        'comment' => 'image name',
                    ],
                ];

                $connection = $setup->getConnection();
                foreach ($columns as $name => $definition) {
                    $connection->addColumn($tableName, $name, $definition);
                }

            }
        }

        $setup->endSetup();
    }
}

পদক্ষেপ 2:setup_version মানটি পরিবর্তন করুনmodule.xml

পদক্ষেপ 3:php bin/magento setup:upgrade সিএলআই থেকে রান কমান্ড


1
আপনি কীভাবে আপগ্রেড স্ক্রিপ্ট ব্যবহার করে প্রাথমিক কী যুক্ত করতে পারবেন তা ব্যাখ্যা করতে পারেন? আমার টেবিলে 'গ্রাহক_আইডি' রয়েছে তবে এটি এখন প্রাথমিক কী নয় আমি এটিকে প্রাথমিক কী হিসাবে যুক্ত করতে চাই।
সুরেশ চিকানী

হ্যাঁ, আপনি এটি পরিবর্তন করুন কলামবিডিডডিএল () ফাংশন ব্যবহার করে পরিবর্তন করতে পারেন। নিম্নলিখিতটি হ'ল স্কিমা। `পাবলিক ফাংশন পরিবর্তন করুন কলাম ($ টেবিল নাম, N কলামনাম, $ সংজ্ঞা, $ ফ্লাশডাটা = মিথ্যা, $ স্কিমা নাম = নাল);`
প্রফুল রাজপুত

আমি কীভাবে 'ગ્રાહ_আইডি' ক্ষেত্রটিকে প্রাথমিক কী হিসাবে প্রয়োগ করতে পারি? কোড exanple ব্যাখ্যা।
সুরেশ চিকানী

আপনি কি দয়া করে যোগ করতে পারেন "আমরা কীভাবে বিদ্যমান কলামের ধরণের সংশোধন করতে পারি?" আপনার প্রশ্নে?
প্রফুল রাজপুত

3
@ কেয়ার শাহ, আপনার নতুন ফাইল এম 2 তৈরি করার দরকার নেই। আপনাকে নিম্নলিখিত কোডগুলি আপগ্রেডশেমি.এফপিতে রাখতে হবে এবং সেটআপ_ভার্সনটিকেও মডিউল.এক্সএমএল হিসাবে আপডেট করতে হবে। যদি (version_compare ($ প্রসঙ্গ-> getVersion (), '০.০.০') <0) {// আপনার কোড} যদি (version_compare ($ প্রসঙ্গ-> getVersion (), '1.0.1') <0) {/ / আপনার কোড}
প্রফুল রাজপুত

2

ইনস্টলার স্কিমা আপগ্রেড করতে আপনাকে 'আপগ্রেডশেমিএইচপিপি' লিখতে হবে,

আপগ্রেডশেমা.এফপি এর উদাহরণ:

namespace <namespace>\<modulename>\Setup;

use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\Setup\UpgradeSchemaInterface;

/**
* @codeCoverageIgnore
*/
class UpgradeSchema implements UpgradeSchemaInterface
{
    /**
 * {@inheritdoc}
 */
public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
{
    $installer = $setup;

    $installer->startSetup();

    /*your code here*/

    $installer->endSetup();
}
}

পদক্ষেপ 2: আপনার মডিউলটিতে আপনি সেই ফাইল পরিবর্তনে setup_version মান (প্রাক্তন: 1.0.1 থেকে 1.0.2) সংস্করণ মানটি বর্তমান সংস্করণ মানের চেয়ে বেশি হওয়া উচিত module

পদক্ষেপ 3: পিএইচপি বিন / ম্যাজেন্টো সেটআপ চালান: সি এল এল থেকে আপগ্রেড কমান্ড

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.