很多人應該都遇到吧。
1、.env
檔案配置
按照原先的環境變數重新配置一份
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=root
DB_PASSWORD=
OTHER_DB_CONNECTION=mysql
OTHER_DB_HOST=127.0.0.1
OTHER_DB_PORT=3306
OTHER_DB_DATABASE=other_database
OTHER_DB_USERNAME=root
OTHER_DB_PASSWORD=
2、orm 配置指定連線
config/database.php
中配置額外的 mysql 連線
/**
* 其他庫
*/
'other_mysql' => [
'driver' => 'mysql',
'url' => env('OTHER_DATABASE_URL'),
'host' => env('OTHER_DB_HOST', '127.0.0.1'),
'port' => env('OTHER_DB_PORT', '3306'),
'database' => env('OTHER_DB_DATABASE', 'forge'),
'username' => env('OTHER_DB_USERNAME', 'forge'),
'password' => env('OTHER_DB_PASSWORD', ''),
'unix_socket' => env('OTHER_DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
3、設定模型
user
模型
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Member extends Model
{
protected $connection = 'other_mysql'; // 指定連線
protected $table = 'users'; // 資料表名稱
protected $primaryKey = 'user_id'; // 表主鍵
public $incrementing = false; // 主鍵是否自增
protected $guarded = []; // create 方法黑名單欄位
/**
* 使用者其他資訊
*/
public function other()
{
return $this->belongsTo(UserOther::class, 'user_id', 'user_id');
}
}
user_other
模型
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class UserOther extends Model
{
protected $connection = 'mysql'; // 指定連線
protected $table = 'users'; // 資料表名稱
protected $primaryKey = 'other_id'; // 表主鍵
public $incrementing = false; // 主鍵是否自增
protected $guarded = []; // create 方法黑名單欄位
}
提示
請使用 belongsTo
方法關聯,hasOne
方法關聯的資料始終未 null
或 []
求問大佬
文件上所說的 belongsTo
方法用於定義反向關聯,但是“反向”這取決於個人理解,為什麼模型設定 $connection
後就沒辦法使用 hasOne
或 hasMany
方法獲取到有效資料呢。
本作品採用《CC 協議》,轉載必須註明作者和本文連結