2016-12-20 12 views
1

У меня есть пользовательский компонент J 2.5. В меню этого компонента также у меня есть SQL поле:Как получить результаты запроса MySQL из пункта меню компонента в Joomla и уточнить с предложением foreach where?

<field 
    name="title" 
    type="sql" 
    default="10" 
    label="აირჩიეთ კატეგორია" 
    multiple="multiple" 
    query="SELECT id AS value, title FROM #__deals_categories" 
/> 

Я адресности данные из функции и сохранения его в $category массиве:

$dealsparam = JFactory::getApplication()->getParams(); 
$category = $dealsparam->get(title, 10); 

Выход для $ категории является массив:

Array ([0] => 20 [1] => 23 [2] => 33 [3] => 41 [4] => 49) 

Это идентификаторы категорий из базы данных. Кроме того, у меня есть функция для получения контента из этих категорий. Все в порядке, когда у меня есть один идентификатор категории, но когда у меня много идентификаторов категорий ex: 2, 4, 5 и т. Д., Я не могу получить данные из mysql. Я пытаюсь выделить предложение where, но есть некоторая ошибка, которую я не мог понять.

В дальнейшем я пытаюсь Foreach где положение и получить данные из различных категорий:

if ($category) { 
    print_r ($category); 
    foreach ($category as $cat){ 
     $query->where('d.category_id = ' . (int) $cat); 
     echo $cat.'<br>'; 
    } 
} 

ответ

1

Вы должны использовать IN вместо = состояния -

$category = (array) $category; 
jimport('joomla.utilities.arrayhelper'); 
JArrayHelper::toInteger($category); 
if(!empty($category)){ 
    $query->where('d.category_id IN(' . implode(',', $category) . ')'); 
} 
+0

' где ('d.category_id ='. (int) $ category) // Также этот метод не работает -> где ('d.category_id ='. $ category) // но этот метод работает -> где ('d.category_id = 23') ?> ' – Gocha

+0

@Gocha: Не уверен, что не так, но может быть обновлен код поможет. – Irfan

+0

Да, я обновил код, см. Другие вопросы. – Gocha

1

Что вы выполнение с вашим оператором `$ query-> where 'заключается в том, чтобы добавить к запросу условия AND и SQL. Итак, если элемент принадлежит только к одной категории, ни один элемент не будет соответствовать. У вас есть два варианта: 1- Заявлено по Ирфан: использовать IN (category1, category2, ...) 2- Используйте 'или', чтобы составить запрос:

(d.category_id = category1) OR (d.category_id = category2) ...