Larvel에서 수동 설정으로 데이터베이스와 연결할 수 없습니다.
프로젝트는 런타임에 여러 데이터베이스와 연결해야 하는 작업을 수행하고 있으며, 연결 속성을 즉시 설정하고 있으며, 다음과 같이 수행하고 있습니다.
도우미를 만듭니다.
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
if(! function_exists('conexionBD')){
/**
* Establish a tenant database connection.
*
* @param $hostname
* @param $username
* @param $password
* @param $database
*/
function conexionBD($hostname, $username, $password, $database){
DB::purge('empresa');
Config::set('database.connections.empresa.host', $hostname);
Config::set('database.connections.empresa.database', $database);
Config::set('database.connections.empresa.username', $username);
Config::set('database.connections.empresa.password', $password);
DB::reconnect('empresa');
Schema::connection('empresa')->getConnection()->reconnect();
}
}
테넌트라는 미들웨어를 만들었습니다.
public function handle($request, Closure $next) {
if (($request->session()->get('empresaId')) === null)
return redirect()->route('inicio')->withErrors(['error' => __('Por favor inicie sesión en alguna empresa antes de intentar esta acción')]);
$empresa = new empresa();
$empresa->connect();
return $next($request);
}
저의 엠프레사 모델은 이렇습니다.
class empresa extends Model
{
protected $fillable = [
'hostname',
'username',
'password',
'database'
];
public function connect()
{
if (! $this->connected()) {
conexionBD(
$this->hostname,
$this->username,
$this->password,
$this->database
);
}
}
private function connected()
{
$connection = Config::get('database.connections.empresa');
return $connection['username'] == $this->username &&
$connection['password'] == $this->password &&
$connection['database'] == $this->database;
}
}
이 코드를 실행하면 "SQLSTATE [HY000] [1045] 사용자 ''@'localhost''(암호: NO 사용) 오류에 대한 액세스가 거부되었습니다. 데이터베이스 구성에 데이터베이스, 사용자 이름, 암호 및 호스트가 비어 있습니다.데이터베이스의 경우, 요약 표에 올바른 정보가 있는 필드가 있지만 데이터베이스를 변경할 때 시스템이 해당 필드를 알려줍니다. 로컬 호스트 사용자가 없고 데이터베이스에 암호가 있는 경우에는 왜 해당 필드가 있는지 이해할 수 없습니다.
내 코드가 누락되었거나 멀티 테넌트 시스템이 올바르게 작동하지 않도록 잘못하고 있다는 것을 아는 사람이 있습니까?
루트 디렉터리에서 .env 파일을 확인하고 예제와 같이 데이터베이스 값을 설정합니다.
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=root
DB_PASSWORD=
모델 레벨에서 연결을 변경할 수 있습니다.도움이 되었으면 좋겠습니다.
class ModelOnOtherDB extends Model
{
public function __construct()
{
$this->connection = "other_db";
parent::__construct();
}
}
config/database에 "other_db" 연결을 구성해야 합니다.
기타솔루션
연결 변경을 위한 가능한 해결책
public static function table($table, $bd) {
return DB::table($table)->connection($db);
}
하지만 콘디그/데이터베이스에 대한 모든 연결이 필요합니다.php :(
언급URL : https://stackoverflow.com/questions/53560119/unable-to-connect-with-database-with-manual-settings-in-laravel
'programing' 카테고리의 다른 글
"inline" 키워드 vs "인라이닝" 개념 (0) | 2023.10.13 |
---|---|
Chrome에서 JavaScript 메모리 누수 찾기 (0) | 2023.10.13 |
워드프레스 폼취급 (0) | 2023.10.13 |
노코기리 문서를 루비 해시로 변환 (0) | 2023.10.13 |
워드프레스에서 포스트아이디를 사용하여 포스트 썸네일을 얻는 방법? (0) | 2023.10.13 |