getListQuery: получать значения из другого метода

Я хотел бы расширить мой метод getListQuery. На данный момент я выбираю данные из mysql следующим образом:

$query->select(*);
$query->from('`#__hero_invoices` AS a');

// Join over the invoice-data
$query->select("SUM(ip.factor * ip.value) as totalsum");
$query->join("LEFT", "#__hero_invoices_positions AS ip ON ip.invoiceid=a.id");                 

// Join over the ordermapping-data
$query->select("om.orderid");
$query->join("LEFT", "#__hero_invoices_mapping AS om ON om.invoiceid=a.id");

// Join over the order-data
$query->select("o.userid as userid");
$query->join("LEFT", "#__hero_orders AS o ON o.id=om.orderid"); 

// Join over the customer-data
$query->select("c.lastname as customer_lastname, c.firstname as customer_firstname, c.company as customer_company");
$query->join("LEFT", "#__hero_customers AS c ON c.userid=o.userid");        

// Join over the users for the checked out user
$query->select("uc.name AS editor");
$query->join("LEFT", "#__users AS uc ON uc.id=a.checked_out");

// Join over the user field 'created_by'
$query->select('created_by.name AS created_by');
$query->join('LEFT', '#__users AS created_by ON created_by.id = a.created_by');

Ну, теперь я хотел бы получить информацию из другой модели для каждого получаемого результата И я хотел бы использовать методы сортировки.

Моя первая попытка состояла в том, чтобы использовать getListQuery и перезаписать getItems () следующим образом:

/**
 * getItems function.
 * 
 * @access public
 * @return void
 */
public function getItems() 
{
    $modelinvoice           =       JModelLegacy::getInstance( 'Invoice', 'HeroModel' );

    $items                  =       parent::getItems();


    foreach($items as $item)
    {
        $invoice            =   $modelinvoice->getItem($item->id);
        $item->totalsum     =   $invoice->totalsum;
    }


    return $items;
}

Это отлично работает - представление может получить доступ к «totalsum», но, конечно, я не могу использовать сортировку и поиск этого псевдополя с помощью

echo JHtml::_('searchtools.sort', 'COM_HERO_HEADING_TOTALSUM', 'a.totalsum', $listDirn, $listOrder);

, на мой взгляд.

Любые идеи для решения этой проблемы?

2 голоса | спросил MyFault 1 stEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 01 Sep 2015 17:42:33 +0300 2015, 17:42:33

1 ответ


3

Я предполагаю, что у вас есть 2 таблицы, и вы хотите отобразить список элементов из таблицы 1, но также добавить некоторые данные из таблицы 2 (например, общая сумма) для каждого элемента .

Если вы хотите использовать функциональные возможности Joomla по умолчанию, вам нужно получить общую сумму в запросе списка для первой таблицы. Это можно сделать с помощью подзапросов ( подзапросы MySQL ) , Вы не сможете использовать функции сортировки Joomla, если вы назначаете данные из второй таблицы через PHP, как в настоящее время.

Ваш запрос будет выглядеть примерно так:

SELECT 
    a.field1, 
    a.field2, 
   (SELECT SUM(b.field3) FROM table2 AS b WHERE b.table1_id = a.id) AS totalsum
FROM 
    table1 AS a

Поле сортировки может выглядеть так:

echo JHtml::_('searchtools.sort', 'COM_HERO_HEADING_TOTALSUM', 'totalsum', $listDirn, $listOrder)

Я рад изменить /улучшить этот ответ, если вы предоставите дополнительную информацию.

ответил fruppel 1 stEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 01 Sep 2015 22:03:59 +0300 2015, 22:03:59

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132