ডেটাবেস

কারণ বেশিরভাগ প্লাগইন 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();

মডেলের জন্য ডেটাবেস কনফিগার করা

আমরা মডেলের জন্য একটি Base ক্লাস তৈরি করতে পারি, Base ক্লাসে $connection ব্যবহার করে প্লাগিনের নিজস্ব ডেটাবেস সংযোগ নির্ধারণ করতে পারি, যেমন

<?php

namespace plugin\foo\app\model;

use DateTimeInterface;
use support\Model;

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

}

এভাবে প্লাগিনের সমস্ত মডেল Base থেকে উত্তরাধিকারী হবে, এটি স্বয়ংক্রিয়ভাবে প্লাগিনের নিজের ডেটাবেস ব্যবহার করবে।

স্বয়ংক্রিয়ভাবে ডেটাবেস আমদানি করা

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 'অর্ডার আইডি',
  `user_id` int NOT NULL COMMENT 'ব্যবহারকারী আইডি',
  `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 'অর্ডার আইডি',
  `user_id` int NOT NULL COMMENT 'ব্যবহারকারী আইডি',
  `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 ফাইলের বিবৃতিগুলি কার্যকর করবে।