я не уверен, как поставить это на английском языке, поэтому здесь в SQL
:Zend select-> WHERE с использованием LIKE на каждом ключе массива
SELECT "track_sub_genre".* FROM "track_sub_genre"
WHERE "track_sub_genre"."name" LIKE '%rock punk%'
OR ("track_sub_genre"."name" LIKE '%rock%' AND "track_sub_genre"."name" LIKE '%punk%')
SQL, выше генерируется этим кодом, однако есть проблема, которую я объясню ниже.
$keywords = 'rock punk';
$key_arr = explode(' ' , $keywords);
if(count($key_arr) > 1) {
$select->where(new \Zend\Db\Sql\Predicate\Like('track_sub_genre.name', '%'.$keywords.'%'));
$select->where(
new \Zend\Db\Sql\Predicate\PredicateSet(
array(
new \Zend\Db\Sql\Predicate\Like('track_sub_genre.name', '%'.$key_arr[0].'%'),
new \Zend\Db\Sql\Predicate\Like('track_sub_genre.name', '%'.$key_arr[1].'%'),
),
\Zend\Db\Sql\Predicate\PredicateSet::OP_AND
),
\Zend\Db\Sql\Predicate\PredicateSet::OP_OR
);
} else {
// Do not worry about this case
}
Проблема заключается в том, конечно, что я не буду знать, сколько слов я буду иметь в $key_arr
, поэтому мне нужен динамический код, который будет генерировать этот SQL.
Мне действительно интересно, как это делается. Заранее спасибо.
Это верно, так просто, и я не видел его , Спасибо! –