web-dev-qa-db-ja.com

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

テーブルが2つあり、テーブル1のアイテムのリストを表示したいが、テーブル2のデータ(合計の合計など)を各アイテムに追加したいとします

デフォルトのJoomla機能を使用したい場合は、最初のテーブルのリストクエリで合計を取得する必要があります。これは副選択( MySQLサブクエリ )を使用して行うことができます。現在のようにPHPを介して2番目のテーブルからデータを割り当てると、Joomlaのソート関数を使用できなくなります。

クエリは次のようになります。

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)

さらに情報を提供していただければ、この回答を編集または改善させていただきます。

3
fruppel