ホームページ >PHPフレームワーク >Swoole >Hyperf フレームワークを使用してデータベース間クエリを実行する方法

Hyperf フレームワークを使用してデータベース間クエリを実行する方法

WBOY
WBOYオリジナル
2023-10-20 17:36:341470ブラウズ

Hyperf フレームワークを使用してデータベース間クエリを実行する方法

Hyperf フレームワークを使用してデータベース間クエリを実行する方法

はじめに:
アプリケーションの開発では、多くの場合、複数のデータベース間でクエリを実行する必要があります。たとえば、電子商取引アプリケーションでは、製品情報 (あるデータベースに保存されている) とユーザー情報 (別のデータベースに保存されている) をクエリする必要がある場合があります。 Hyperf フレームワークを使用してアプリケーションを開発する場合、データベース間のクエリも簡単に実装できます。

この記事では、Hyperf フレームワークを使用してデータベース間のクエリを実行する方法を紹介し、具体的なコード例を示します。

1. 複数のデータベース接続を構成する
まず、Hyperf フレームワークの構成ファイル (config/autoload/database.php) で複数のデータベース接続を構成する必要があります。たとえば、2 つのデータベースに対応する「database1」と「database2」という 2 つの接続を構成しました。

return [
    'default' => env('DB_DRIVER', 'mysql'),
    'connections' => [
        'database1' => [
            'driver' => env('DB_DRIVER', 'mysql'),
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', 3306),
            'database' => env('DB_DATABASE1', 'database1'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_general_ci',
            'prefix' => '',
            'pool' => [
                'min_connections' => 1,
                'max_connections' => 10,
                'connect_timeout' => 10.0,
                'wait_timeout' => 3.0,
                'heartbeat' => -1,
                'max_idle_time' => (float)env('DB_MAX_IDLE_TIME', 60),
            ],
            'options' => [
                // ...
            ],
        ],
        'database2' => [
            'driver' => env('DB_DRIVER', 'mysql'),
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', 3306),
            'database' => env('DB_DATABASE2', 'database2'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_general_ci',
            'prefix' => '',
            'pool' => [
                'min_connections' => 1,
                'max_connections' => 10,
                'connect_timeout' => 10.0,
                'wait_timeout' => 3.0,
                'heartbeat' => -1,
                'max_idle_time' => (float)env('DB_MAX_IDLE_TIME', 60),
            ],
            'options' => [
                // ...
            ],
        ],
    ],
];

2. モデルに関連付けられたデータベース接続を構成する
Hyperf フレームワークでは、モデルのプロパティを設定することでモデルに関連付けられたデータベース接続を指定できます。たとえば、製品モデル Product があり、データベース接続 "database1" に関連付けられています:

namespace AppModel;

use HyperfDatabaseModelModel;

class Product extends Model
{
    protected $connection = 'database1';
    
    // ...
}

同様に、ユーザー モデル User では、データベース接続 "database2" に関連付けられるように設定します。

namespace AppModel;

use HyperfDatabaseModelModel;

class User extends Model
{
    protected $connection = 'database2';
    
    // ...
}

3. データベース間クエリの実行
上記の準備により、コントローラーなどでデータベース間クエリを実行できます。以下に、product テーブルと user テーブルのデータをクエリする方法を示す例を示します。

namespace AppController;

use AppModelProduct;
use AppModelUser;
use HyperfHttpServerAnnotationController;
use HyperfHttpServerAnnotationGetMapping;

/**
 * @Controller()
 */
class CrossDatabaseController
{
    /**
     * @GetMapping(path="/cross-database")
     */
    public function crossDatabase()
    {
        // 查询商品信息
        $product = Product::query()->where('id', 1)->first();
        echo "商品名称:" . $product->name . "
";
        
        // 查询用户信息
        $user = User::query()->where('id', 1)->first();
        echo "用户名:" . $user->name . "
";
    }
}

上記の例では、Product モデルと User モデルのそれぞれを通じて異なるデータベースにクエリを実行し、クロスデータベース クエリを実現しました。

結論:
この記事では、Hyperf フレームワークを使用してデータベース間のクエリを実行する方法を紹介します。複数のデータベース接続を構成し、モデルに関連付けられたデータベース接続をセットアップすることにより、データベース間のクエリ機能を簡単に実装できます。このスキルを習得すると、アプリケーション内の複数のライブラリ間のデータの関連付けやクエリをより適切に処理できるようになり、開発効率が向上します。

以上がHyperf フレームワークを使用してデータベース間クエリを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。