أطار عمل كود إجنيتور وحل مشكلة WHERE و OR LIKE في قاعدة البيانات

أمس كنت اعمل على مشروع ومن ضمن هذا المشروع جزء خاص بعملية البحث في قاعدة البيانات وعند الشروع في كتابة الكود واجهتني مشكلة أراها انها نقص في أطار العمل كود إجنيتور، المشكلة كالتالي:

عند كتابة الأوامر التالية
$this->db->where('article_status', 'published');
$this->db->like('article_title', $search_query);
$this->db->like('article_content', $search_query);
$this->db->get('articles');

فستكون نتيجة أستعلام الـ MySQL هي
SELECT * FROM (`articles`) WHERE `article_status` = 'published' AND `article_title` LIKE '%كلمة البحث%' AND `article_content` LIKE '%كلمة البحث%'

المشكلة هنا اذا كانت كلمة البحث موجودة في عنوان المقال وغير موجودة في المحتوى فسوف نفقد احد نتائج البحث واذا استبدلنا أمر الـ LIKE الثاني بـ OR LIKE للحصول على هذه النتيجة فسوف يتم تجاهز أمر الـ WHERE الأول وسوف تظهر لنا من ضمن البحث المقالات الغير منشورة.

عندها قلت لنفسي يجب ان يكون هناك امر لكي يجعل أمر الـ WHERE أو الـ LIKE في مجموعة مع بعضهم لكي تكون النتيجة كالتالي

SELECT * FROM (`articles`) WHERE `article_status` = 'published' AND (`article_title` LIKE '%كلمة البحث%' OR `article_content` LIKE '%كلمة البحث%')

ولكن للأسف كود إجنيتور خذلني هذه المرة، ولكن الحمد لله وجدت حل لهذه المشكلة بخدعة بسيطة وهي كالتالي
$this->db->where('article_status', 'published');
$this->db->where(sprintf( '(`article_title` LIKE %1$s OR `article_content` LIKE %1$s)', $this->db->escape('%' . $search_query . '%') ));
$this->db->get('articles');

[php] دالة array_filter لتنقيح وحذف العناصر الفارغة من المصفوفة

أذا بحثت في جوجل عن removing empty elements from an array فستجد الكثير من الحلول لحذف العناصر الفارغة من المصفوفة (array) ولكن دائماً ما يتم السهو عن دالة array_filter الموجودة بشكل أفتراضي في البي أتش بي او ما يطلق عليهم Native functions.

الدالة array_filter تعمل على تنقيح و حذف العناصر بداخل المصفوفة بالإضافة  إلى تمرير العناصر إلى دوال أخرى ليتم من خلالهم التحقق من العناصر الممررة إليهم.

مثال رقم 1 – حذف العناصر الفارغة:
$array = array( 'foo', FALSE, -1, NULL, '');
print_r(array_filter($array));

 

مثال رقم 2 – تمرير العناصر إلى دالة لحذف العناصر التي قيمتها أصغر من 5:
function my_filter($value)
{
if( $value < 5 )
{
return FALSE;
}
return TRUE;
}
$array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ,13 ,14, 15);
print_r(array_filter($array, 'my_filter'));