تکنیک‌های اساسی جستجو در لاراول

گردآوری و تالیف : رضا جمال زاده
تاریخ انتشار : 23 شهریور 1398
دسته بندی ها : لاراول

هنگامی که برنامه ما هنوز کوچک است، برای مثال در ابتدای شروع به کار برنامه، استفاده از راه‌حل‌های دست ساز برای قسمت‌های مختلف برنامه بسیار راه‌گشا است. این مورد برای دیتابیس نیز صادق است، هیچ ضرورتی ندارد که ما از یک پکیج در ابتدای کار در برنامه خود استفاده کنیم. در بیشتر اوقات ما می‌توان از بعضی تکنیک‌های ساده برای پیاده سازی جستجو در Eloquent  خود استفاده کنیم.

تذکر مهم

 بخش جستجو یکی از قسمت‌های حیاتی هر اپلیکیشن است. یک ظاهر خوب و مناسب به کاربران در پیدا کردن اطلاعات مورد نیازشان کمک می‌کند. بنابراین پیاده سازی یک راه‌حل که در هر دو بخش فرانت‌اند و بک‌اند خوب باشد بسیار ضروری است. در این مقاله ما در مورد موضوع فرانت اند یا UI صحبت نمی‌کنیم، در صورت نیاز می‌توانید از مقالات موجود در سایت راکت استفاده کنید.

 بنابراین در این مقاله فقط به بحث در مورد MySQL و Eloquent می‌پردازیم.

یک where ساده

متد where  چیز جدیدی نیست، همانطور که می‌دانید از این متد می‌توانیم برای بررسی وجود داده‌های خاص در یک ستون استفاده کنیم:

<?php

$results = Post::where('title', 'foo')->get();

همچنین در یک مرحله بالاتر، ما می‌توانیم با قرار دادن یک  array، چند ستون جدول را بررسی کنیم. این روش مانند عملگر && عمل می‌کند و سپس نتایجی را به دست می‌آوریم که در هر دو شرط قرار داده شده صحیح باشد.

<?php

$results = Post::where([
    ['title', '=', 'foo'],
    ['published', '=', true],
])->get();

همچنین در صورتی که ما بخواهیم یک کوئری ایجاد کنیم که مانند عملگر || کار کند، ما باید از متد orWhere() در کوئری بیلدر خود استفاده کنیم:

<?php

$results = Post::where('title', 'foo')->orWhere('description', 'foo')->get();

حالت‌های زیادی برای ترکیب متد where وجود دارد، اکیداً تاکید می‌کنم که صفحه‌ی مستندات لاراول مربوط به متد where را مطالعه کنید.

استفاده از کلیدواژه‌ی LIKE

در مرحله‌ی بعد، بیایید کلیدواژه‌ی LIKE را بررسی کنیم. نکته‌ی قابل توجه در این‌جا این است که در این مرحله انعطاف‌پذیری بیشتری نسبت به مرحله قبل وجود دارد. استفاده از عبارات wildcard مانند استفاده از % می‌تواند نتایج جالب‌تر و بهتری به همراه داشته باشد.

<?php

// We can use a variable
$keyword = 'foo';

// Starts with 'foo', ends with anything
$results = Post::where('title', 'like', "{$keyword}%")->get();

// Ends with 'foo', starts with anything
$results = Post::where('title', 'like', "%{$keyword}")->get();

// Contains 'foo'
$results = Post::where('title', 'like', "%{$keyword}%")->get();

همانطور که در بالا دیدید، در این حالت انعطاف‌پذیری بیشتر است. ما می‌توانیم یک عبارت را در صورتی که در ابتدا و یا در انتهای یک رشته قرار دارد را بررسی کنیم. تصور کنید، شما تمام عبارتی را که می‌خواهید جستجو کنید را به خاطر ندارید و فقط یک قطعه از آن را می‌دانید، در این صورت همین یک قطعه برای پیدا کردن نتیجه مورد نظر کافی است، البته توجه داشته باشید که شما می‌توانید از حالت‌های مختلف where و ترکیبات آن با توجه به نیاز خود استفاده کنید.

جستجو در ستون‌های JSON

JSON انعطاف‌پذیری زیادی دارد که این جزء ویژگی‌های جذاب آن است و همچنین ما می‌توانیم برای آن کوئری‌ها را به سادگی اجرا کنیم زیرا Eloquent پشتیبانی خوبی از JSON دارد. قبل از ادامه بحث یک نکته مهم وجود دارد، اگر کالکشن‌های شما به حروف بزرگ و کوچک حساس نباشد، ستون‌های JSON به این موارد حساس هستند.

اگر ما مسئله‌ی حساسیت به حروف را نداشته باشیم، می‌توانیم مانند مثال زیر عمل کنیم:

<?php

$results = Post::where('meta->description', 'like', '%foo%')->get();

به همین سادگی، اما اگر بخواهیم حساسیت به حروف را مدیریت کنیم باید چه کاری انجام دهیم؟ در ادامه بیایید در مورد whereRaw() صحبت کنیم، ابتدا کد زیر را بررسی کنید و سپس ادامه توضیحات را مطالعه کنید:

<?php

$keyword = 'foo';
$results = Post::whereRaw('lower(meta->"$.description") like lower(?)', ["%{$foo}%"]);

چند نکته که باید در اینجا به آن‌ها توجه کنید، اول از همه، سینتکس در این حالت تمیز و مرتب نیست زیرا در این‌جا ما یک عبارت کامل را قرار می‌دهیم. نکته دیگر این است که نشانه ? را باید در تابع lower  وارد شود. الزاماً این پارامتر را باید قرار دهیم زیرا یک راه مناسب برای محافظت در برابر داده‌های آسیب پذیر است. همانطور که دیدید ما یک آرایه را به عنوان پارامتر دوم قرار دادیم، اولین آیتم در آرایه الزامی است آیتم دوم برای اتصال دوم و آیتم‌های بعدی برای اتصالات بعدی قرار می‌گیرند. این روش به نحوه عملکرد عبارات خام (raw expressions) معروف است.

به این نکته‌ی مهم توجه کنید: ما از تابع lower() استفاده کردیم به این دلیل که روش مطمئنی، در هنگام کار با ستون‌های JSON  است. در روش بالا ما داده‌ها را تبدیل می‌کنیم و سپس بر اساس حروف کوچک داده‌ها را ذخیره می‌کنیم.این روش یک راه‌حل کمی پیچیده است اما به خوبی کار می‌کند.

استفاده از Sounds Like

بیایید آخرین روش در این مقاله را مورد بررسی قرار دهید. سوال اینجاست که اگر کاربر عبارت مورد نظر خود را نادرست وارد کند چه اتفاقی می‌افتد؟ در این صورت بهتر است بررسی شود که آیا داده‌های مشابه در دیتابیس وجود دارد؟ در این حالت ما نمی‌توانیم از کلیدواژه LIKE استفاده کنیم، اما به جای آن می‌توانیم از SOUNDS LIKE استفاده کنیم. در مثال زیر طریقه استفاده از آن نشان داده شده:

<?php

$results = Post::where('title', 'sounds like', 'mistpyed')->get();

پشتیبانی از  sounds like در لاراول نسخه 5.6.8 اضافه شده است.

در پشت صفحه‌، این کلید واژه الگوریتمی را اجرا می‌کند که داده‌های مشابه را مقایسه می‌کنند، بنابراین ما با خیال راحت می‌توانید از آن استفاده کنید. فقط کافی است که کلمه کلیدی مورد نظر خود را در کادر جستجو قرار دهیم و منتظر مشاهده نتیجه باشیم در این حالت ما نتایجی را به دست می‌آوریم که شباهت زیادی به عبارت مورد جستجو دارند و نه فقط مواردی که دقیقاً مشابه آن عبارت هستند.

نتیجه‌گیری

همانطور که مشاهده کردید لاراول روش‌های مناسب با طریقه پیاده‌سازی ساده و  انعطاف پذیری را ارائه می دهد. ما می‌توانیم متدwhere  را ترکیب کنیم و یا وقتی نیاز داریم از raw expressions استفاده کنید و همچنین می‌توانید از کلید‌واژه‌های کمتر شناخته شده استفاده کنیم. همه این موارد به صورت پیش فرض در لاراول قرار دارد.

اگر شما از روش‌های جالب دیگری برای جستجو استفاده می‌کنیم، لطفا آن‌ها را در قسمت کامنت‌ها با ما به اشتراک بگذارید.

منبع

مقالات پیشنهادی

  • ساخت QrCode در لاراول

    در این مقاله میخواهیم درمورد نحوه ساخت استفاده از QrCode ها در لاراول صحبت کنیم.پکیجی که برای این کار ازش استفاده می کنیم Simpe QrCode هست

    امیررضا سیستانه ای
  • متدهای کمکی لاراول برای URL ها

    Jacob Bennett یک نظرسنجی در توئیتر گذاشت تا ببینه جامعه ی توسعه دهندگان از چه روشی برای صدا زدن آدرس های URL در اپلیکیشن لاراولی خود استفاده می کنند

    امیررضا سیستانه ای