डेटाबेस

चूंकि अधिकांश प्लगइन webman-admin स्थापित करते हैं, इसलिए सीधे webman-admin के डेटाबेस कॉन्फ़िगरेशन का पुन: उपयोग करने की सिफारिश की जाती है।

मॉडल बेस क्लास plugin\admin\app\model\Base का उपयोग करने पर स्वचालित रूप से webman-admin के डेटाबेस कॉन्फ़िगरेशन का उपयोग होगा।

<?php

namespace plugin\foo\app\model;

use plugin\admin\app\model\Base;

class Orders extends Base
{
    /**
     * मॉडल से संबद्ध तालिका।
     *
     * @var string
     */
    protected $table = 'foo_orders';

    /**
     * तालिका से संबंधित प्राथमिक कुंजी।
     *
     * @var string
     */
    protected $primaryKey = 'id';

}

आप plugin.admin.mysql का उपयोग करके webman-admin के डेटाबेस का संचालन भी कर सकते हैं, जैसे कि

Db::connection('plugin.admin.mysql')->table('user')->first();

अपनी डेटाबेस का उपयोग करना

प्लगइन अपनी डेटाबेस का उपयोग करने का विकल्प भी चुन सकता है, जैसे कि plugin/foo/config/database.php की सामग्री निम्नलिखित है

return  [
    'default' => 'mysql',
    'connections' => [
        'mysql' => [ // mysql कनेक्शन का नाम
            'driver'      => 'mysql',
            'host'        => '127.0.0.1',
            'port'        => 3306,
            'database'    => 'डेटाबेस',
            'username'    => 'उपयोगकर्ता नाम',
            'password'    => 'पासवर्ड',
            'charset'     => 'utf8mb4',
            'collation'   => 'utf8mb4_general_ci',
        ],
        'admin' => [ // admin कनेक्शन का नाम
            'driver'      => 'mysql',
            'host'        => '127.0.0.1',
            'port'        => 3306,
            'database'    => 'डेटाबेस',
            'username'    => 'उपयोगकर्ता नाम',
            'password'    => 'पासवर्ड',
            'charset'     => 'utf8mb4',
            'collation'   => 'utf8mb4_general_ci',
        ],
    ],
];

इसकी संदर्भ विधि है Db::connection('plugin.{प्लगइन}.{कनेक्शन नाम}'); जैसे कि

use support\Db;
Db::connection('plugin.foo.mysql')->table('user')->first();
Db::connection('plugin.foo.admin')->table('admin')->first();

यदि आप मुख्य परियोजना का डेटाबेस उपयोग करना चाहते हैं, तो आप सीधे इसका उपयोग कर सकते हैं, जैसे कि

use support\Db;
Db::table('user')->first();
// मान लेते हैं कि मुख्य परियोजना में एक admin कनेक्शन भी कॉन्फ़िगर किया गया है
Db::connection('admin')->table('admin')->first();

मॉडल के लिए डेटाबेस कॉन्फ़िगर करना

हम मॉडल के लिए एक बेस क्लास बना सकते हैं, बेस क्लास में $connection का उपयोग करके प्लगइन के अपने डेटाबेस कनेक्शन को निर्दिष्ट किया जा सकता है, जैसे कि

<?php

namespace plugin\foo\app\model;

use DateTimeInterface;
use support\Model;

class Base extends Model
{
    /**
     * @var string
     */
    protected $connection = 'plugin.foo.mysql';

}

इस तरह, प्लगइन में सभी मॉडल जो बेस से विरासत में प्राप्त करते हैं, अपने स्वयं के डेटाबेस का उपयोग करेंगे।

स्वचालित रूप से डेटाबेस आयात करना

php webman app-plugin:create foo चलाने पर स्वचालित रूप से foo प्लगइन बनाया जाएगा, जिसमें plugin/foo/api/Install.php और plugin/foo/install.sql शामिल हैं।

सूचना
यदि install.sql फ़ाइल उत्पन्न नहीं हुई है तो कृपया webman/console को अपग्रेड करने का प्रयास करें, आज्ञा है composer require webman/console ^1.3.6

प्लगइन इंस्टॉलेशन के दौरान डेटाबेस आयात करना

प्लगइन स्थापित करते समय Install.php में install मेथड को निष्पादित किया जाएगा, यह मेथड स्वचालित रूप से install.sql में sql वक्तव्यों को आयात करेगा, ताकि डेटाबेस तालिकाओं का स्वचालित रूप से आयात हो सके।

install.sql फ़ाइल की सामग्री डेटाबेस तालिका बनाने और तालिका में ऐतिहासिक संशोधन sql वक्तव्यों को शामिल करती है, ध्यान दें कि प्रत्येक वक्तव्य को ; के साथ समाप्त किया जाना चाहिए, जैसे कि

CREATE TABLE `foo_orders` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT 'प्राथमिक कुंजी',
  `order_id` varchar(50) NOT NULL COMMENT 'आदेश id',
  `user_id` int NOT NULL COMMENT 'उपयोगकर्ता id',
  `total_amount` decimal(10,2) NOT NULL COMMENT 'देय राशि',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='आदेश';

CREATE TABLE `foo_goods` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT 'प्राथमिक कुंजी',
  `name` varchar(50) NOT NULL COMMENT 'नाम',
  `price` int NOT NULL COMMENT 'कीमत',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='उत्पाद';

डेटाबेस कनेक्शन बदलें

डिफ़ॉल्ट रूप से install.sql में आयातित लक्ष्य डेटाबेस webman-admin का डेटाबेस है, यदि आप इसे अन्य डेटाबेस में आयात करना चाहते हैं, तो आप Install.php में $connection गुण को संशोधित कर सकते हैं, जैसे कि

<?php

class Install
{
    // प्लगइन के अपने डेटाबेस को निर्दिष्ट करें
    protected static $connection = 'plugin.admin.mysql';

    // ...
}

परीक्षण

php webman app-plugin:install foo चलाकर प्लगइन स्थापित करें, फिर डेटाबेस देखें, आपको foo_orders और foo_goods तालिकाएं बनाई हुई मिलेगी।

प्लगइन अपग्रेड करते समय तालिका की संरचना बदलना

कभी-कभी प्लगइन अपग्रेड करने के लिए नई तालिकाएँ बनाने या तालिका की संरचना को बदलने की आवश्यकता होती है, आप सीधे install.sql के अंत में संबंधित वक्तव्य जोड़ सकते हैं, ध्यान दें कि प्रत्येक वक्तव्य के अंत में ; होना चाहिए, जैसे कि foo_user तालिका जोड़ना और foo_orders तालिका में एक status फ़ील्ड जोड़ना

CREATE TABLE `foo_orders` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT 'प्राथमिक कुंजी',
  `order_id` varchar(50) NOT NULL COMMENT 'आदेश id',
  `user_id` int NOT NULL COMMENT 'उपयोगकर्ता id',
  `total_amount` decimal(10,2) NOT NULL COMMENT 'देय राशि',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='आदेश';

CREATE TABLE `foo_goods` (
 `id` int NOT NULL AUTO_INCREMENT COMMENT 'प्राथमिक कुंजी',
 `name` varchar(50) NOT NULL COMMENT 'नाम',
 `price` int NOT NULL COMMENT 'कीमत',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='उत्पाद';

CREATE TABLE `foo_user` (
 `id` int NOT NULL AUTO_INCREMENT COMMENT 'प्राथमिक कुंजी',
 `name` varchar(50) NOT NULL COMMENT 'नाम'
 PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='उपयोगकर्ता';

ALTER TABLE `foo_orders` ADD `status` tinyint NOT NULL DEFAULT 0 COMMENT 'स्थिति';

अपग्रेड के दौरान Install.php में update मेथड को निष्पादित किया जाएगा, यह मेथड भी install.sql में वक्तव्यों को निष्पादित करेगा, यदि नए वक्तव्य हैं तो नए वक्तव्य को निष्पादित करेगा, यदि पुराने वक्तव्य हैं तो छोड़ देगा, ताकि अपग्रेड डेटाबेस में संशोधन कर सके।

प्लगइन अनइंस्टॉल करते समय डेटाबेस हटाना

प्लगइन अनइंस्टॉल करते समय Install.php की uninstall मेथड को कॉल किया जाएगा, यह स्वचालित रूप से install.sql में तालिका निर्माण के संबंधित वक्तव्यों का विश्लेषण करेगा और स्वचालित रूप से उन तालिकाओं को हटा देगा, ताकि प्लगइन अनइंस्टॉल करते समय डेटाबेस तालिकाओं को हटाया जा सके। यदि आप अनइंस्टॉल करते समय केवल अपनी uninstall.sql को निष्पादित करना चाहते हैं, तो केवल plugin/{प्लगइन नाम}/uninstall.sql बनाना होगा, इस तरह uninstall मेथड केवल uninstall.sql फ़ाइल में वक्तव्यों को निष्पादित करेगा।