मेरे पास PHP में फ्रेमवर्क Yii2 के साथ एक एप्लीकेशन है। मैं चाहता हूं कि यह एप्लिकेशन कुछ डेटाबेस इंजन जैसे Postgresql, MySql या SQL सर्वर के साथ चल रहा हो। समस्या यह है कि इसे कैसे स्थानांतरित किया जाए। आप जानते हैं, उदाहरण के लिए, Postgresql और SQL सर्वर डेटाबेस के सबसेट के रूप में स्कीमा का उपयोग करते हैं लेकिन MySQL का नहीं।

मैं कुछ स्कीमा जैसे history, main और log के साथ Postgresql के साथ अपना एप्लिकेशन विकसित कर रहा था। अब मैं अपने आवेदन को MySQL के साथ चलाने का प्रयास करना चाहता हूं। इसे हासिल करने के लिए मुझे क्या करना चाहिए?

POSTGRESQL
    my_database -> database name
        main -> schema
            tables
        history -> schema
            tables

मैं चाहता हूं कि मेरा माइग्रेशन जो कुछ भी आप डेटाबेस इंजन (postgresql, mssql या mysql) का उपयोग करते हैं, बिना नियंत्रक/मॉडल/आदि के चला सकते हैं।

0
Donny Akhmad Septa Utama 23 सितंबर 2020, 16:30

1 उत्तर

सबसे बढ़िया उत्तर

आप प्रत्येक विधि में उपयोग किए जा रहे डेटाबेस सिस्टम के प्रकार के आधार पर yii\db\Migration का विस्तार कर सकते हैं और सशर्त जोड़ सकते हैं।

उदाहरण के लिए, सभी विधियों पर लागू होने वाली चूक के लिए, मैं yii\db\Migration का विस्तार करता हूं और init() को ओवरराइड करता हूं

    public function init()
    {
        parent::init();

        switch ($this->db->driverName) {
            case 'mysql':
                $this->tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB';
                $this->dbType = 'mysql';
                break;
            case 'pgsql':
                // specifics for pgsql
            default:
                throw new \RuntimeException('Your database is not supported!');
        }
    }

फिर आपके सभी माइग्रेशन को इसका विस्तार करना चाहिए।

इसके अनुसार, उसी माइग्रेशन से आप विशिष्ट डेटाबेस सिस्टम के लिए विशिष्ट ऑपरेशन कर सकते हैं।

1
Gabriel Alejandro López López 23 सितंबर 2020, 21:08