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(...
我已经在我的模型中声明了我的新连接,但它不起作用, 附件是我的模型和控制器。
型号
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(...