بعضی وقتا نیازه که شما با بیش از یک دیتابیس در ارتباط باشید در لاراول ، مثلا ممکنه برای هر وبلاگی که توی سیستم وبلاگ دهی شما ایجاد میشه یک دیتابیس درست کنید(البته فک نکنم تو این مورد ، این کار معقول باشه) اونجا نیاز هست که در اولین قدم توی فایل config/database.php کانکشن مربوط به این کار رو ایجاد کنید. بصورت پیشفرض ۴ کانکشن در لاراول ۵ تعریف شده که میتونید شما هم کانکشن دیگه ای برای استفاده تعریف کنید.
تعریف کانکشن برای اتصال به بیش از یک دیتابیس
'mysql2' => [ 'driver' => 'mysql', 'host' => env('DB_EXT_HOST', 'localhost'), 'database' => env('DB_EXT_DATABASE', 'db2'), 'username' => env('DB_EXT_USERNAME', 'username'), 'password' => env('DB_EXT_PASSWORD', 'password'), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, ],
توی کد بالا ما کانکشن mysql2 رو تعریف کردیم. دقت داشته باشید که کد بالا باید درون connectios تعریف کنید. همچنین توی ریشه اصلی پروژه و توی فایل .env هم کانکشن باید مشخص شه… اون فایل رو ادیت کنید و مقادیر دلخواهتون رو اضافه کنید :
DB_EXT_HOST=localhost DB_EXT_DATABASE=db2 DB_EXT_USERNAME=username DB_EXT_PASSWORD=password
حالا کانکشن های شما آماده هستند و میتونید به روشی که در ادامه میگم از اونها استفاده کنید.
تغییر کانکشن پیشفرض در لاراول
برای اینکه در کل پروژه کانکشن پیشفرض رو تغییر بدیم ، در فایل config/database.php مقدار ‘default’ => ‘mysql’, رو به ‘default’ => ‘mysql2’, تغییر میدیم. در این صورت در کل پروژه شما mysql2 بعنوان کانکشن دیفالت استفاده خواهد شد.
استفاده از یک کانکشن در یک مدل خاص
اما گاهی لازمه که در یک مدل از یک کانکشن خاص استفاده بشه ، برای انجام این کار به روش زیر عمل میکنیم :
<?php class SomeModel extends Eloquent { protected $connection = 'mysql2'; }
از این پس تمام اتصالاتی که با مدل بالا به دیتابیس وصل میشه با کانکشن mysql2 خواهد بود.
تغییر کانکشن در کنترلر
شاید بخواید جزئی تر شید و بخواید درون یک کنترلر خاص کانکشن رو عوض کنید . برای اینکار به راحتی از روش زیر اشتفاده کنید :
<?php class SomeController extends BaseController { public function someMethod() { $someModel = new SomeModel; $someModel->setConnection('mysql_2'); $something = $someModel->find(1); return $something; } }
همونطور که میبینید با استفاده از متد setConnection() این کار شدنیه…
و استفاده در Query Builder :
برای استفاده از کانکشن دیگه توی کوئوری بیلدر هم بصورت زیر عمل میکنیم :
$users = DB::connection('mysql2')->select(...);
همونطور که میبینید لاراول بصورت خیلی شیک و تمیز کار شما رو راه میندازه و نیاز به اضافه کاری نیست.
امیدوارم به دردتون خورده باشم 🙂