teamtnt / tntsearch

A fully featured full text search engine written in PHP
https://tnt.studio/solving-the-search-problem-with-laravel-and-tntsearch
MIT License
3.1k stars 291 forks source link

How to add MYSQL_ATTR_SSL_CA option? #296

Open duje13 opened 1 year ago

duje13 commented 1 year ago

Hi,

Usually database platforms (such as PlanetScale or TiDB Cloud) do not allow to connect without SSL/TLS. So, to be able to connect I need to set PDO::MYSQL_ATTR_SSL_CA attribute. My application is Symfony, so I do it on Symfony way by setting it in doctrine.yaml config file. But I don't know how to do it for TNT?

This is how I setup TNT currently:

//$dbUrl is env variable, DATABASE_URL="mysql://user:password@host:port/db_name"
$this->dbUrl = parse_url($dbUrl);
$tntConfig = [
            "driver" => $dbUrl["scheme"],
            "host" => $dbUrl["host"] . ":" . $dbUrl["port"],
            "database" => substr($dbUrl["path"], 1),
            "username" => $dbUrl["user"],
            "password" => $dbUrl["pass"],
            "storage" => "my/tnt/output/path,
            "stemmer" => PorterStemmer::class, 
];

$this->tntObject = new TNTSearch();
$this->tntObject->loadConfig($tntConfig);

Can I somehow add additional options (MYSQL_ATTR_SSL_CA in my case) to config? Or is there any other way to make TNT be able to connect to MySQL using SSL/TLS.

duje13 commented 1 year ago

Hi,

I found solution. It is possible to add custom PDO and give it to TNT with setDatabaseHandle method.

This solution works for me, but this solution feels kind of hack, more proper way would be if you can set it via loadConfig. Is that possible? If not, I think possibility to add this (or any other MySql attribute) should be added.

Anyway, I suggest to update documentation about this. Connecting via SSL seems too me like common use case and it not so straight forward to not being mention anywhere.