اتصال به دیتابیس ClickHouse در برنامه‌های Laravel


برای اتصال به دیتابیس ClickHouse کافیست تا اطلاعات مربوط به دیتابیس خود را به متغیرهای محیطی برنامه خود، اضافه کنید؛ به عنوان مثال:

کپی
CLICKHOUSE_HOST=rainier.liara.cloud
CLICKHOUSE_PORT=33273
CLICKHOUSE_DATABASE=default
CLICKHOUSE_USERNAME=root
CLICKHOUSE_PASSWORD=x4y2LJvdFyG5wVO87VbXDrpg

در ادامه، با دستور زیر یک سرویس برای اتصال ایجاد کنید:

کپی
php artisan make:class Services/ClickHouseService

سپس، در مسیر app/Services/ClickHouseService.php قطعه کد زیر را قرار دهید:

کپی
<?php

namespace App\Services;

use ClickHouseDB\Client;

class ClickHouseService
{
  private Client $client;

  public function __construct()
  {
      $this->client = new Client([
          'host' => env('CLICKHOUSE_HOST'),
          'port' => env('CLICKHOUSE_PORT'),
          'username' => env('CLICKHOUSE_USERNAME'),
          'password' => env('CLICKHOUSE_PASSWORD'),
      ]);

      $this->client->database(
          env('CLICKHOUSE_DATABASE')
      );
  }

  public function connectionTest()
  {
      return $this->client->select('SELECT 1');
  }
}

در ادامه، کافیست تا در routes/web.php قطعه کد زیر را اضافه کنید:

کپی
use App\Services\ClickHouseService;
Route::get('/clickhouse-test', function (ClickHouseService $clickhouse) {

  try {

      $result = $clickhouse->connectionTest();

      return view('clickhouse-test', [
          'success' => true,
          'message' => 'Connection established successfully',
          'result' => $result->rows(),
      ]);

  } catch (\Exception $e) {

      return view('clickhouse-test', [
          'success' => false,
          'message' => $e->getMessage(),
          'result' => null,
      ]);
  }

});

در ادامه، در مسیر resources/views/clickhouse-test.blade.php، قطعه کد زیر را قرار دهید:

کپی
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>ClickHouse Connection</title>

  <style>
      body {
          font-family: Arial, sans-serif;
          background: #f5f5f5;
          display: flex;
          justify-content: center;
          align-items: center;
          height: 100vh;
      }

      .card {
          background: white;
          padding: 30px;
          border-radius: 12px;
          width: 500px;
          box-shadow: 0 5px 20px rgba(0,0,0,.1);
      }

      .success {
          color: green;
      }

      .failed {
          color: red;
      }

      pre {
          background: #111;
          color: #fff;
          padding: 15px;
          border-radius: 8px;
          overflow: auto;
      }
  </style>
</head>

<body>

<div class="card">

  @if($success)

      <h2 class="success">
          Connected
      </h2>

      <p>
          ClickHouse connection successful.
      </p>

  @else

      <h2 class="failed">
          Failed
      </h2>

      <p>
          {{ $message }}
      </p>

  @endif


  <h3>Response:</h3>

  <pre>
{{ print_r($data, true) }}
  </pre>

</div>

</body>
</html>

تمامی کارها انجام شده است و اکنون می‌توانید در مرورگر، در صفحه clickhouse-test/، وضعیت اتصال به دیتابیس را بررسی کنید.

مثال فوق از اتصال به دیتابیس را می‌توانید به صورت کامل در گیت‌هاب لیارا، مشاهده کنید.