खोज…
एकाधिक डेटाबेस कनेक्शन
लारवेल उपयोगकर्ता को कई डेटाबेस कनेक्शन पर काम करने की अनुमति देता है। यदि आपको कई डेटाबेस से कनेक्ट करने और उन्हें एक साथ काम करने की आवश्यकता है, तो आप कनेक्शन सेटअप से सावधान रहें।
यदि आवश्यक हो तो आप एक ही एप्लिकेशन में विभिन्न प्रकार के डेटाबेस का उपयोग करने की भी अनुमति देते हैं।
डिफ़ॉल्ट कनेक्शन config/database.php
, आप कॉन्फ़िगरेशन आइटम कॉल देख सकते हैं:
'default' => env('DB_CONNECTION', 'mysql'),
यह नाम नीचे दिए गए कनेक्शन के नाम mysql
संदर्भ देता है:
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'database' => database_path('database.sqlite'),
'prefix' => '',
],
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
],
यदि आपने अन्य कोड या कमांड में डेटाबेस कनेक्शन के नाम का उल्लेख नहीं किया है, तो लारवेल डिफ़ॉल्ट डेटाबेस कनेक्शन का नाम उठाएगा। हालाँकि, कई डेटाबेस कनेक्शनों में, यहां तक कि आप डिफ़ॉल्ट कनेक्शन सेटअप करते हैं, आपने हर जगह बेहतर सेटअप किया है कि आपने किस डेटाबेस कनेक्शन का उपयोग किया है।
माइग्रेशन फ़ाइल
माइग्रेशन फ़ाइल में, यदि एकल डेटाबेस कनेक्शन, आप उपयोग कर सकते हैं:
Schema::create("table",function(Blueprint $table){
$table->increments('id');
});
कई डेटाबेस कनेक्शन में, आप लारवेल को यह बताने के लिए connection()
पद्धति का उपयोग करेंगे कि आप किस डेटाबेस कनेक्शन का उपयोग करते हैं:
Schema::connection("sqlite")->create("table",function(Blueprint $table){
$table->increments('id');
});
कारीगर पलायन करते हैं
यदि आप एकल डेटाबेस कनेक्शन का उपयोग करते हैं, तो आप चलेंगे:
php artisan migrate
हालाँकि, कई डेटाबेस कनेक्शन के लिए, आप बेहतर बता सकते हैं कि कौन सा डेटाबेस कनेक्शन माइग्रेशन डेटा को बनाए रखता है। तो आप निम्न कमांड चलाएंगे:
php artisan migrate:install --database=sqlite
यह कमांड माइग्रेशन तैयार करने के लिए लक्ष्य डेटाबेस में माइग्रेशन टेबल स्थापित करेगा।
php artisan migrate --database=sqlite
यह कमांड माइग्रेशन चलाएगा और लक्ष्य डेटाबेस में माइग्रेशन डेटा को बचाएगा
php artisan migrate:rollback --database=sqlite
यह कमांड माइग्रेशन को रोलबैक करेगा और लक्ष्य डेटाबेस में माइग्रेशन डेटा को बचाएगा
शानदार मॉडल
एलोकेंट का उपयोग करके एक डेटाबेस कनेक्शन निर्दिष्ट करने के लिए, आपको $connection
संपत्ति को परिभाषित करने की आवश्यकता है:
namespace App\Model\Sqlite;
class Table extends Model
{
protected $table="table";
protected $connection = 'sqlite';
}
एलोकेंट का उपयोग करके दूसरे (दूसरे) डेटाबेस कनेक्शन को निर्दिष्ट करने के लिए:
namespace App\Model\MySql;
class Table extends Model
{
protected $table="table";
protected $connection = 'mysql';
}
लारवेल एक मॉडल में परिभाषित $connection
संपत्ति का उपयोग config/database.php
में परिभाषित निर्दिष्ट कनेक्शन का उपयोग करने के लिए करेगा। यदि किसी मॉडल में $connection
संपत्ति को परिभाषित नहीं किया गया है, तो डिफ़ॉल्ट का उपयोग किया जाएगा।
आप स्टैटिक on
मेथड का उपयोग करके एक अन्य कनेक्शन भी निर्दिष्ट कर सकते हैं:
// Using the sqlite connection
Table::on('sqlite')->select(...)->get()
// Using the mysql connection
Table::on('mysql')->select(...)->get()
डेटाबेस / क्वेरी बिल्डर
आप क्वेरी बिल्डर का उपयोग करके एक अन्य कनेक्शन भी निर्दिष्ट कर सकते हैं:
// Using the sqlite connection
DB::connection('sqlite')->table('table')->select(...)->get()
// Using the mysql connection
DB::connection('mysql')->table('table')->select(...)->get()
अध्याय परीक्षा
seeInDatabase($table,$fielsArray,$connection)
डेटाबेस कनेक्शन कोड का परीक्षण करने के लिए seeInDatabase($table,$fielsArray,$connection)
प्रदान करते हैं। इकाई परीक्षण फ़ाइल में, आपको ऐसा करने की आवश्यकता है:
$this
->json(
'GET',
'result1/2015-05-08/2015-08-08/a/123'
)
->seeInDatabase("log", ["field"=>"value"], 'sqlite');
इस तरह, लारवेल को पता चल जाएगा कि किस डेटाबेस का परीक्षण करना है।
यूनिट टेस्ट में डेटाबेस लेनदेन
लारवेल डेटाबेस को परीक्षणों के दौरान सभी परिवर्तन रोलबैक करने की अनुमति देता है। कई डेटाबेस कनेक्शन के परीक्षण के लिए, आपको $connectionsToTransact
सेट करने की आवश्यकता है
use Illuminate\Foundation\Testing\DatabaseMigrations;
class ExampleTest extends TestCase
{
use DatabaseTransactions;
$connectionsToTransact =["mysql","sqlite"] //tell Laravel which database need to rollBack
public function testExampleIndex()
{
$this->visit('/action/parameter')
->see('items');
}
}