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

السؤال

نشر

أرغب في دمج أكثر من قاعدة بيانات في مشروع لارافيل، بحيث يمكنني الوصول إلى البيانات الموجودة في قاعدتين أو أكثر بدلاً من قاعدة بيانات واحدة فقط.

فهل هنالك طريقة تمكنني من استخدام أكثر من قاعدة بيانات واحدة في لارافيل؟ وكيف يمكنني  التبديل بين القاعدين ضمن المتحكمات controllers ؟

Recommended Posts

  • 0
نشر

يمكنك ذلك من خلال وضع الأكواد التالية في ملف .env 

DB_CONNECTION_SECOND=mysql
DB_HOST_SECOND=127.0.0.1
DB_PORT_SECOND=3306
DB_DATABASE_SECOND=database2
DB_USERNAME_SECOND=root
DB_PASSWORD_SECOND=

فلاحظ جيدا اننا قمنا بتعريف متغيرات لقاعدة بيانات أخرى, ثم في مسار config/database.php نقوم بوضع 

'mysql2' => [
    'driver'    => env('DB_CONNECTION_SECOND'),
    'host'      => env('DB_HOST_SECOND'),
    'port'      => env('DB_PORT_SECOND'),
    'database'  => env('DB_DATABASE_SECOND'),
    'username'  => env('DB_USERNAME_SECOND'),
    'password'  => env('DB_PASSWORD_SECOND'),
],

تحت mysql بحيث يكون هذا يكون معلومات الاتصال بقاعدة البيانات الأخرى. 

يمكنك صنع جدول لقاعدة البيانات عبر Schema بحيث نعرف Schema::connection لقاعدة البيانات الأخرى مثل 

Schema::connection('mysql2')->create('users_two', function($table)
{
    $table->increments('id'):
});

يمكنك استخدام Query Builder بهذا الشكل 

$posts = DB::connection('mysql2')->select();

ايضا يمكنك توجيه Model إلى استخدام قاعدة الاتصال الثاني الخاص بقاعدة البيانات الثانية باستخدام 

protected $connection = 'mysql2';

ايضا يمكنك في Controller استخدام الشكل التالي :

public function index()
{
	$post = new Post;
	$post->setConnection('mysql2');
	$something = $post->find(1);
	$get_posts = Post::on('mysql2')->find(1);
	return $get_posts;
}

 

  • 0
نشر

إن كل اتصال مع قاعدة بيانات في لارافيل يلزمه الخصائص التالية ضمن ملف .env:

DB_CONNECTION=mysql نوع قاعدة البيانات
DB_HOST=127.0.0.1 المضيف إما محلي أو خادم خارجي
DB_PORT=3306 المنفذ 
DB_DATABASE=database1 اسم قاعدة البيانات
DB_USERNAME=root اسم المتسخدم
DB_PASSWORD=pass كلمة المرور

ولذلك يمكن تكرارها عند كل تعريف لقاعدة بيانات.

أما بالنسبة لاستخدام الاتصال فبالإضافة لما تم شرحه في التعليق السابق، يمكنك عن طريق Eloquent المقدّمة من لارافيل تعريف الاتصال، فمثلاً في حال وجود model ترغب باستخدامه دائماً مع اتصال محدد أو قاعدة بيانات محددة، فلا داعي لتكرار ذكر عملية الاتصال في كل مرة ستقوم باستخدامه، يكفي وضع $connection في Eloquent ضمن المودل الخاص بك وذلك سيضمن إبقاء الاتصال نفسه، كالتالي:

class SomeModel extends Eloquent {

    protected $connection = 'mysql2';

}

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...