اذهب إلى المحتوى

السؤال

نشر

لدي مشروع مبني على إطار العمل لارافيل Laravel وهذا المشروع مربوط بالفعل بقاعدة بيانات MySQL وأريد ان أقوم بربطه بقاعدة بيانات أخرى في نفس الوقت (من نوع Postgres) للحصول على بعض البيانات.

كيف أقوم بهذا الأمر؟ هل يوفر لارافيل Facade للتعامل مع مثل هذه الحالات؟ أم يجب أن أقوم بعمل سكريبت منفصل للإتصال بقاعدة البيانات وأعمل عليها يدويًا؟

Recommended Posts

  • 1
نشر

واحدة من المميزات التي يقدمها لارافيل هي في إمكانية استعماله لاتصالات قواعد بيانات مختلفة، ولن يكون ذلك الا بإعداد كل منها في ملفات الاعداد. 

لاحظ أن ملف config/database.php يتوفر على مصفوفة بالمفتاح connections تحمل هاته المصفوفة تعريفات مختلفة من بينها تلك الخاصة بـ mysql و pgsql: 

        'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

        'pgsql' => [
            'driver' => 'pgsql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '5432'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'prefix_indexes' => true,
            'schema' => 'public',
            'sslmode' => 'prefer',
        ],

كل نموذج Model من نماذج لارافيل يحتوي على الخاصية connection التي تكون مضبوطة على اتصال قواعد البيانات الافتراضي المعرف في ملف اعداد قواعد البيانات. 

يمكنك تخصيص تلك التي تعمل على اتصال قاعدة بيانات pgsql وتلك التي تعمل على اتصال mysql باسنادها كقيمة ل connection في ملف النموذج المستهدف: 

class Post extends Model{

protected $connection = 'pqsql';

..
}

في ملف التهجير المرافق لهذا النموذج قم بضبط نفس الامر عن طريق استعمال التابع connection للواجهة Schema: 

Schema::connection('pqsql')->create('posts', function (Blueprint $table) {
        $table->id();
        $table->string('title');
        $table->timestamps();
});

بفرض أنك اتصالي قواعد البيانات اللذان لديك يعملان بشكل عادي، نفذ أمر التهجير php artisan migrate وستلاحظ أن كل قاعدة بيانات تهجر بها بيانات مختلفة. 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...