Maison  >  Article  >  cadre php  >  Explication détaillée de la façon dont Laravel utilise plusieurs bases de données (avec des exemples de code)

Explication détaillée de la façon dont Laravel utilise plusieurs bases de données (avec des exemples de code)

藏色散人
藏色散人avant
2021-10-29 15:04:192545parcourir

La colonne tutorielle suivante de Laravel vous présentera comment utiliser plusieurs bases de données dans Laravel. J'espère qu'elle vous sera utile !

Utilisez .env >= 5.0.env >= 5.0 (测试基于 5.5 Laravel 8 也可用)

.env 文件

DB_CONNECTION=mysqlDB_HOST=127.0.0.1DB_PORT=3306DB_DATABASE=database1DB_USERNAME=rootDB_PASSWORD=secretDB_CONNECTION_SECOND=mysqlDB_HOST_SECOND=127.0.0.1DB_PORT_SECOND=3306DB_DATABASE_SECOND=database2DB_USERNAME_SECOND=rootDB_PASSWORD_SECOND=secret

config/database.php 文件

'mysql' => [
    'driver'    => env('DB_CONNECTION'),
    'host'      => env('DB_HOST'),
    'port'      => env('DB_PORT'),
    'database'  => env('DB_DATABASE'),
    'username'  => env('DB_USERNAME'),
    'password'  => env('DB_PASSWORD'),],'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'),],

注意:mysql2 中,如果 db_usernamedb_password 相同, 那么你可以使用  env('DB_USERNAME')


模式

要指定使用哪个连接,只需使用 connection() 方法

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

查询生产器

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

模型

在模型中设置 $connection变量。

class SomeModel extends Eloquent {

    protected $connection = 'mysql2';}

你也可以在运行时通过 setConnection 方法或 on 静态方法定义连接:

class SomeController extends BaseController {

    public function someMethod()
    {
        $someModel = new SomeModel;

        $someModel->setConnection('mysql2'); // non-static method

        $something = $someModel->find(1);

        $something = SomeModel::on('mysql2')->find(1); // static method

        return $something;
    }}

注意 在尝试与跨数据库的表建立关系时要小心! 可以这样使用,但是它可能带有一些注意事项,并且取决于您拥有的数据库与数据库设置。


来自 Laravel Docs

使用多个数据库连接

当使用多个连接时,您可以通过 DB门面类上的连接方法访问每个连接。传递给 connection 方法的名称应该对应于 config/database.php 配置文件中列出的一个连接:

$users = DB::connection('foo')->select(...);

您还可以使用连接实例上的 getPdo (testé basé sur 5.5 Laravel 8 également disponible)

dans le fichier .env

$pdo = DB::connection()->getPdo();
dans Fichier config/database.php 🎜🎜rrreee
🎜🎜Remarque :🎜 Dans mysql2, si db_username et db_password code> est le même, alors vous pouvez utiliser <code>env('DB_USERNAME'). 🎜🎜
🎜🎜Mode🎜🎜🎜Pour spécifier quelle connexion utiliser, utilisez simplement la méthode connection() 🎜rrreee🎜🎜Interrogez le producteur 🎜🎜rrreee🎜🎜Modèle 🎜🎜🎜 dans le modèle Définissez la variable $connection dans. 🎜rrreee🎜Vous pouvez également définir la connexion au moment de l'exécution via la méthode setConnection ou la méthode statique on : 🎜rrreee
🎜🎜Remarque🎜 Lorsque vous essayez d'établir une croix -table de base de données Soyez prudent en ce qui concerne les relations ! Cela peut être utilisé, mais cela peut comporter quelques mises en garde et dépend de la base de données et de la configuration de la base de données dont vous disposez. 🎜🎜

🎜🎜Depuis Laravel Docs

🎜🎜Utilisation de plusieurs connexions à la base de données🎜🎜🎜Lorsque vous utilisez plusieurs connexions, vous pouvez transmettre la 🎜DB🎜classe de façade La connexion La méthode sur chaque connexion est accessible. Le nom passé à la méthode 🎜connection🎜 doit correspondre à une connexion listée dans le fichier de configuration 🎜config/database.php🎜 : 🎜rrreee🎜 Vous pouvez également utiliser une connexion instance La méthode getPdo accède à l'instance PDO sous-jacente d'origine : 🎜rrreee🎜🎜Adresse d'origine : https://stackoverflow.com/questions/31847054/how-to-use-multiple-databases-in- laravel 🎜🎜Adresse de traduction : https://learnku.com/laravel/t/62110🎜🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer