Joomla 3.xを習得するのに苦労しており、レコードを別のテーブルに結合し、結合したデータをビュー/フォームで使用する方法について困惑しています。私はこれに類似したものを使用するコンポーネントに精通しています:(私が精通しているアプローチは他のコンポーネントと私のGoogleの結果全体でかなり一般的であるように思われるため、部分的なスニペットのみを含めました)
models/mymodel.php
// JOIN and retrieve the data I'm interested in:
function getData()
$query = $db->getQuery(true);
$query->select('a.name, b.lastvisitDate FROM #__mytable AS a')
->innerJoin('#__users AS b ON a.created_by = b.id');
views\myview\tmpl\default.php
// The data from the joined data is available for display something like this
echo "<span>" . $this->item->lastvisitDate. "</span>"
Joomla 3では、prepareTable
、getTable
、getForm
、loadFormData
、getItem
などの一連の関数が表示されます。
私の知る限りでは、定義済みのフォーム/ XML、フィールドなどを使用して、プライマリテーブルを非常に詳細に説明しています。ビューに表示されるgetItem
のデータをchange変更できますが、2番目から使用可能なデータを取得する方法については無知ですテーブル!
主テーブルを別のテーブルに結合し、その情報をビューで表示できるようにするための最良の方法は何ですか。 (例:#__ users.idにmyTable.created_byを結合して、最終訪問日などを取得します。)
これがそれを行うためのベストプラクティスな方法であるか(より良い方法があるかどうかコメントしてください)、またはまさにあなたが探している方法であるかどうかはわかりませんが、Joomlaの記事を例として使用した私のアプローチは次のとおりです:
関心のあるファイル
view.html.phpを変更します
public function display($tpl = null)
の上部に、次のような行が表示されます。
$this->item = $this->get('Item');
_models\article.php
_にある関数getItem
から記事データを取得します
その行を次のようなものに複製します。
$this->item = $this->get('Mydata');
article.phpを変更します
次に、このコードブロックを使用して、目的のデータを取得するための関数を追加する必要があります。
_ public function getMydata($pk = null)
{
$myItemObj = new stdClass();
$myItemObj->something = 'something you need';
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*')
->from($db->quoteName('#__users'))
->where($db->quoteName('id') . ' = 467');
$db->setQuery($query);
$myItemObj->MydbObj = $db->loadObject();
return $myItemObj;
}
_
ビューでは、次のようにそのデータにアクセスできます。
_echo "<span>". $this->myData->something ."</span>";
echo "<span>". $this->myData->MydbObj->username ."</span>";
_
より包括的なソリューションが必要な場合は、 MVCコンポーネントでの複数のモデルの使用 を確認することをお勧めします。