Laravel 模型中的设置连接数据库不起作用

Laravel set connection Database in Model not working

我已经在我的模型中声明了我的新连接,但它不起作用, 附件是我的模型和控制器。

型号

protected $connection = 'mysql';

public function __construct() {
    $this->connection = 'newConnection'.auth()->user()->company_id;
}

protected $fillable =['operation_id','warehouse_id','salesman_name','address','contact_number','email_address'];

public $primaryKey='id';

控制器

 $salesman = new Salesman([
                'operation_id'   => $request->get('operation_id'),  
                'warehouse_id'   => $request->get('warehouse_id'),
                'salesman_name'  => $request->get('salesman_name'),  
                'address'        => $request->get('address'),  
                'contact_number' => $request->get('contact_number'),  
                'email_address'  => $request->get('email_address'),
            ]);
$salesman->save();

我认为您正在覆盖构造方法中的 $connection 变量。连接名称根据公司 ID 更改。确保指定的数据库连接在 config/database.php 中定义为 -

'connections' => [
    'sqlite' => [
        'driver' => 'sqlite',
        'database' => env('DB_DATABASE', database_path('database.sqlite')),
        'prefix' => '',
    ],
    'newConnectionCompanyId' => [
        'driver' => 'mysql',
        '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' => '',
        'strict' => true,
        'engine' => null,
    ],

编辑: 如果插入不起作用,试试这个:

$salesman = new Salesman;

$salesman->setConnection('newConnectionCompanyId');

//insert and save code here

您可能误解了数据库连接配置,下面是一个完整的示例:

型号

protected $connection = 'mysql_1';

config/database.php

'connections' => [

        'mysql_1' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST_1', 'localhost'),
            'port' => env('DB_PORT_1', '3306'),
            'database' => env('DB_DATABASE_1', 'database_1'),
            'username' => env('DB_USERNAME_1', 'root'),
            'password' => env('DB_PASSWORD_1', 'root'),
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => '',
            'strict' => false,
            'engine' => null,
        ],

        'mysql_2' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST_2', 'localhost'),
            'port' => env('DB_PORT_2', '3306'),
            'database' => env('DB_DATABASE_2', 'database_2'),
            'username' => env('DB_USERNAME_2', 'root'),
            'password' => env('DB_PASSWORD_2', 'root'),
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => '',
            'strict' => false,
            'engine' => null,
        ],

        ...

.env

//DB_CONNECTION is default connection
DB_CONNECTION=mysql_1

DB_HOST_1=localhost
DB_PORT_1=3306
DB_DATABASE_1=database_1
DB_USERNAME_1=username_1
DB_PASSWORD_1=password_1

DB_HOST_2=localhost
DB_PORT_2=3306
DB_DATABASE_2=database_2
DB_USERNAME_2=username_2
DB_PASSWORD_2=password_2

设置如下后 型号

protected $connection = 'mysql_1';

确保您不使用

DB::table('{table_name}')->where(...

相反,将您的主要 table 名称定义为

protected $table = 'table_name';

并使用Model的名字来写查询

Model_Name::where(...