مقایسه استفاده از LIKE در MySQL و PostgreSQL در مدل‌های CodeIgniter 4

مقایسه استفاده از LIKE در MySQL و PostgreSQL در مدل‌های CodeIgniter 4
مقایسه استفاده از LIKE در MySQL و PostgreSQL در مدل‌های CodeIgniter 4

مقایسه استفاده از LIKE در MySQL و PostgreSQL در مدل‌های CodeIgniter 4

در هنگام پیاده‌سازی جستجو در پروژه‌هایی که با فریم‌ورک CodeIgniter 4 توسعه داده شده‌اند، استفاده از عملگر لایک LIKE یکی از رایج‌ترین روش‌ها برای فیلتر کردن داده‌ها بر اساس رشته‌های ورودی کاربران است. اما نکته‌ای که معمولاً در این زمینه نادیده گرفته می‌شود تفاوت در رفتار دیتابیس‌های مختلف مانند پایگاه داده‌های MySQL و پایگاه داده‌های PostgreSQL هنگام کار با مقایسه‌های متنی حساس به حروف بزرگ و کوچک (case sensitivity) است.

 

مقایسه استفاده از LIKE در MySQL و PostgreSQL در مدل‌های CodeIgniter 4

در پایگاه داده‌ی MySQL، جستجوهای متنی با عملگر لایک LIKE به طور پیش‌فرض حساس به حروف بزرگ و کوچک نیستند، مگر این‌که نوع کاراکتری (collation) جدول یا ستون به گونه‌ای تنظیم شده باشد که تفاوت بین حروف بزرگ و کوچک را تشخیص دهد. در نتیجه شما می‌توانید مستقیماً از متد like() در کلاس Builder استفاده کنید و نتیجه مطلوب را دریافت کنید.

اما در پایگاه داده‌ی PostgreSQL داستان متفاوت است. این دیتابیس برخلاف پایگاه داده‌ی MySQL، جستجو با عملگر لایک LIKE را به‌صورت پیش‌فرض حساس به حروف انجام می‌دهد. بنابراین اگر کاربر عبارتی را وارد کند که حروف آن با مقدار ذخیره‌شده در پایگاه داده مطابقت نداشته باشد، نتیجه‌ای نمایش داده نخواهد شد. راه‌حل متداول برای این موضوع استفاده از تابع LOWER() بر روی ستون‌ها و ورودی کاربر است تا هر دو به حروف کوچک تبدیل شوند و جستجو به‌صورت غیر حساس به حروف بزرگ کوچک (case-insensitive) انجام شود.

در پروژه‌هایی که از فریم‌ورک CodeIgniter 4 استفاده می‌کنند، معمولاً ابتدا نوع درایور پایگاه داده بررسی می‌شود. اگر درایور برابر با PostgreSQL بود، لازم است در بخش شرط‌ها از LOWER(column) و %term% استفاده شود. در غیر این‌صورت و در شرایطی که MySQL در حال استفاده است، می‌توان به سادگی از توابع like() و orLike() استفاده کرد.

نکته مهم این است که هنگام کار با مدل‌ها در فریم‌ورک CodeIgniter 4، بهتر است این منطق را در بخش‌هایی از مدل یا repository قرار دهید تا از تکرار کد نیز جلوگیری شود و کد تمیزتر و قابل نگهداری‌تری داشته باشید. هم‌چنین توجه به تفاوت رفتار پایگاه‌های داده مختلف می‌تواند از بروز باگ‌های زمان اجرا جلوگیری کند، به‌خصوص اگر پروژه قابلیت جابجایی بین دیتابیس‌ها را داشته باشد.

if (!empty($searchTerm)) {
    $searchTerm = strtolower($searchTerm);
    $dbDriver = $this->db->DBDriver;

    $builder->groupStart();

    if ($dbDriver === 'Postgre') {
        $like = '%' . $searchTerm . '%';
        $builder->where("LOWER({$this->table}.name) LIKE", $like)
                ->orWhere("LOWER({$this->table}.sku) LIKE", $like);
    } else {
        $builder->like("{$this->table}.name", $searchTerm)
                ->orLike("{$this->table}.title", $searchTerm);
    }

    $builder->groupEnd();
}

در نهایت، درک درست از نحوه عملکرد لایک LIKE در دیتابیس‌های مختلف و تطبیق آن با ساختار فریم‌ورک CodeIgniter 4 می‌تواند تجربه کاربر نهایی را بهبود بخشد و عملکرد سیستم را نیز بهینه‌تر کند.

برای امتیاز به این نوشته کلیک کنید!
[کل: 1 میانگین: 5]