My Laravel configuration files and code are as follows:
config/database:
'mysql1' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL1'),
'host' => env('DB_HOST_1', 'Example IP1'),
'port' => env('DB_PORT_1', 'Example Port1'),
'database' => env('DB_DATABASE_1', 'forge'),
'username' => env('DB_USERNAME_1', 'forge'),
'password' => env('DB_PASSWORD_1', ''),
'unix_socket' => env('DB_SOCKET_1', ''),
'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'),
]) : [],
],
'mysql2' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL2'),
'host' => env('DB_HOST_2', 'Example IP2'),
'port' => env('DB_PORT_2', 'Example Port2'),
'database' => env('DB_DATABASE_2', 'forge'),
'username' => env('DB_USERNAME_2', 'forge'),
'password' => env('DB_PASSWORD_2', ''),
'unix_socket' => env('DB_SOCKET_2', ''),
'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'),
]) : [],
],
env file:
DB_CONNECTION=mysql1
DB_HOST_1=Example IP1
DB_PORT_1=Example Port1
DB_DATABASE_1=AutomobileAppDB
DB_USERNAME_1=ExampleUser1
DB_PASSWORD_1=ExamplePass1
DB_SOCKET_1=path1
DB_CONNECTION2=mysql2
DB_HOST_2=Example IP2
DB_PORT_2=Example Port2
DB_DATABASE_2=AutomobileAppDB
DB_USERNAME_2=ExampleUser2
DB_PASSWORD_2=ExamplePass2
DB_SOCKET_2=path2
Cartable model code:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Cartable extends Model
{
public static function getCombinedData()
{
$servers = DB::connection(env('DB_CONNECTION1'))
->table(env('DB_DATABASE_1') . '.db_manager_servers')->get();
$mainconn = $servers[0]->connection_name;
$maindbname = $servers[0]->database_name;
$data = collect();
foreach ($servers as $server) {
$conn = $server->connection_name;
$dbname = $server->database_name;
$sql = 'SELECT ' .
$conn . '.' . $dbname . '.documents.docyear,' .
$conn . '.' . $dbname . '.documents.docno,' .
$mainconn . '.' . $maindbname . '.doctype.name
FROM ' .
$conn . '.' . $dbname . '.documents
JOIN ' .
$mainconn . '.' . $maindbname . '.doctype
ON ' .
$conn . '.' . $dbname . '.documents.doctype_id
= ' .
$mainconn . '.' . $maindbname . '.doctype.id';
$sqlcode = DB::select($sql);
$data = $data->merge($sqlcode);
}
dd($data);
return $data;
}
}
I'm getting an error:
Illuminate\Database\QueryException
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '.doctypes ON mysql1.Automobi...' at line 6
These test queries work:
$sql = 'SELECT AutomobileAppDB.documents.docyear,
AutomobileAppDB.documents.docno,
From
AutomobileAppDB.documents
';
$data = DB::connection('mysql1')->select($sql );
dd($data );
and:
$sql = 'SELECT AutomobileAppDB.doctypes.name
From
AutomobileAppDB.doctypes
';
$data = DB::connection('mysql2')->select($sql );
dd($data );
How can I combine data from the two connections using a single query?
I get an error when I enter the connection for each section.