У меня есть пользовательский компонент Joomla MVC. Компонент имеет таблицу элементов и таблицу ставок для доставки каждого элемента. Элемент может иметь несколько ставок.
Мне нужно показать COUNT ставок в представлении LIST элементов в каждой строке foreach.
Каков ЛУЧШИЙ способ достижения этого? Я попытался добавить следующее в модель элементов, но я не понимаю, как определить $ id для каждой строки элемента.
public function getBidsByItemId() { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('COUNT(*)'); $query->from($db->quoteName('#__table_bids')); $query->where($db->quoteName('item_id')." = ".$id); // Reset the query using our newly populated query object. $db->setQuery($query); $count = $db->loadResult(); }
Здесь вы можете увидеть полный компонент / models / items.php, на который я добавил его: http://ideone.com/yPJHRk
Благодарен за помощь экспертов MVC.
Лучшим способом, вероятно, будет JOIN
. Попробуйте добавить в строку 83
что-то вроде следующего (вам придется адаптировать его к структуре таблицы db):
// Join over the fields by field 'item_id' $query->select('itemBids.bids AS bidsNum'); $query->join('LEFT', '#__entrusters_bids AS itemBids ON itemBids.item_id = a.item_id');
Затем вы сможете получить значение из объекта. Я не могу проверить, чтобы это было более специфично для вашей проблемы, поэтому скажите мне, работает ли это.
вы должны определенно сделать соединение, но из того, что я понимаю, что вы хотите, является ставка-счет? В этом случае вы должны сделать групповой запрос, похожий на то, что говорит ilias, но:
$query->select('count(itemBids.bids) AS bidsNum'); $query->join('LEFT', '#__entrusters_bids AS itemBids ON itemBids.item_id = a.id'); $query->group('a.id');
также обратите внимание на изменение ссылки в on-statement в соединении,
приветствует Йонаса