namespace Illuminate\Database\Connectors;
use PDO;
use Illuminate\Support\Arr;
use InvalidArgumentException;
use Illuminate\Database\MySqlConnection;
use Illuminate\Database\SQLiteConnection;
use Illuminate\Database\PostgresConnection;
use Illuminate\Database\SqlServerConnection;
use Illuminate\Contracts\Container\Container;
// namespace it is the namespace
class ConnectionFactory
{// make the Connection Factory
/**
* The IoC container instance.
*
* @var \Illuminate\Contracts\Container\Container
*/
protected $container;//The IoC container instance.
// IoC container instance
/**
* Create a new connection factory instance.
*
* @param \Illuminate\Contracts\Container\Container $container
* @return void
*/
public function __construct(Container $container)
{//Create a new connection factory instance.
$this->container = $container;// set the container
}// this->container container;
/**
* Establish a PDO connection based on the configuration.
*
* @param array $config
* @param string $name
* @return \Illuminate\Database\Connection
*/
public function make(array $config, $name = null)
{//Establish a PDO connection based on the configuration.
$config = $this->parseConfig($config, $name);// set the config
if (isset($config['read'])) {
return $this->createReadWriteConnection($config);//createReadWriteConnection
}// if set the config
// if it is set read
return $this->createSingleConnection($config);// get the single
}// create Single Connection
/**
* Create a single database connection instance.
*
* @param array $config
* @return \Illuminate\Database\Connection
*/
protected function createSingleConnection(array $config)
{//Create a single database connection instance.
$pdo = function () use ($config) {
return $this->createConnector($config)->connect($config);
};// set the pdo set the create Connector connect
// create Connector
return $this->createConnection($config['driver'], $pdo, $config['database'], $config['prefix'], $config);
}// create the Connection
/**
* Create a single database connection instance.
*
* @param array $config
* @return \Illuminate\Database\Connection
*/
protected function createReadWriteConnection(array $config)
{//Create a single database connection instance.
$connection = $this->createSingleConnection($this->getWriteConfig($config));
// connection set the create Single Connection
return $connection->setReadPdo($this->createReadPdo($config));
}// setReadPdo
/**
* Create a new PDO instance for reading.
*
* @param array $config
* @return \PDO
*/
protected function createReadPdo(array $config)
{
$readConfig = $this->getReadConfig($config);//
return $this->createConnector($readConfig)->connect($readConfig);
}//Create a new PDO instance for reading.