2014-04-09 2 views
-2

사용자 정의 joomla MVC 구성 요소가 있습니다. 구성 요소에는 항목 표 과 해당 항목을 제공 할 수있는 입찰가 표가 있습니다.Joomla MVC 목록보기에서 행의 관계형 데이터를 표시하는 방법은 무엇입니까?

내가 항목 모델이를 추가하여 '항목'에 대한 목록을보기에서 관련 '입찰'을 표시하는 방법을 알아 낸 :보기/아이템/뷰

public function getBidsById($id) { 
    $db = JFactory::getDbo(); 
    $query = $db->getQuery(true); 
    $query 
      ->select('*') 
      ->from('#__entrusters_bids ') 
      ->where('item_id = ' . $id); 
    $db->setQuery($query); 
    $db->query(); 
    return $db->loadObjectList(); 
} 

이. html.php :

$model = $this->getModel('Item', 'EntrustersModel'); 
    $itemID = jRequest::getVar('id'); 
    $bidsOnItem = $model->getBidsById($itemID); 
    $this->bidsOnItem = $bidsOnItem; 

보기/항목/tmpl/default.php :

var_dump ($ this-> items_by_id);

모두 정상적으로 작동합니다. - foreach 문의 각 행에서

지금 내가 목록보기 (s가있는 항목)에 대한 입찰의 수를 표시해야합니다 :

여기에 실제 질문입니다.

가장 좋은 방법은 무엇입니까? 내가 항목 모델 및보기/아이템/view.html.php에 동일한을 추가하는 시도, 나는이 목록에 이런 식으로 뭔가를 시도 :

<ul> 
     <?php foreach ($this->items as $item) : ?> 
<li>Item stuff about the item. This item has <?php echo count($item->bidsOnItem); ?> bids</li> 
    <?php endforeach; ?> 
</ul> 

하지만 그건 그냥 0 반환 -에 입찰하지 개수 목록의 각 항목 MVC 전문가의 도움에 감사드립니다.

+1

http://us3.php.net/count을> bidsOnItem 객체입니다 (당신은 통해 Objectlist를 reurning하고) 나는 당신이 실제로 그것에게 무언가를주기를 결심했다고 믿습니다. 그러나 나는 그것이 정말로 당신이 원하는 것이면 쿼리에서 카운트를 반환하지 않는 이유에 대해 정말로 혼란 스럽습니다. 왜 그냥 getBidsCount 메소드를 작성하지 않는가? 또한 JDatabaseQuery에는 이전 쿼리에서 반환 한 행 수를 반환하는 getNumRows() 메서드가 있습니다. – Elin

+0

나는 Elin과 동의 할 것이다. 행 카운트로 시도 했는가? 아니면 다른 이유로 입찰 객체가 필요합니까?- 또는 sizeof ($ item-> bidsOnItem)을 시도 했습니까? – elk

+0

감사합니다 - 아니요, 항목 목록보기에서 그냥 카운트를 원해요. 그래서 당신이 말한 것을 취합니다. 카운트 선택 (*), 항목 GROUP BY 항목을 사용하여 쿼리를 다시 작성할 필요가 있습니까? 아마도 models/items.php에 필요한 전체 항목을 제안 할 수 있습니까? - 엘린, 웹 사이트를 통해 이메일을 보냈습니다. 잠시 시간을내어 주셔서 감사드립니다. – larpo

답변

0

당신은 거기서 혼란스러워했습니다. 시작 템플릿에 변수를 할당하려면 다음을 수행해야합니다

$bar = 'bar'; 
$this->assignRef('foo', $bar); 

는 또한, 쿼리 항목의 목록보다는 항목의 다차원 배열을 반환합니다. 상품별로 입찰가를 계산하려면 각 품목에 대해 별도의 검색어를 실행해야합니다.

예 :

모델

class SomethingModelTest extends JModelLegacy { 
    function getItemList() { 
     // query goes here 
     // return results 
    } 

    function getBidsByItemId($itemId) { 
     // query goes here 
     // return results 
    } 
} 

보기

class SomethingViewTest extends LegacyView { 
    public function display() { 
     $items = $this->get('ItemList'); 
     foreach ($items as &$item) { 
      $item->bids = $this->getModel()->getBidsByItemId($item->itemId); 
     } 

     $this->assignRef('items', $items); 
     parent::display(); 
    } 
} 

그리고 루프 위해를 사용하는 대신 print count($blah);의 단지 print $item->bids를 사용합니다.

+1

이것은 정말 비효율적입니다. 각 항목에 대해 별도의 쿼리를 실행하고 싶지는 않습니다. 우선, 다른 선택이 없다면 'COUNT (*)를 선택하고 GROUP BY 항목을 입찰합니다.'라는 쿼리 하나를 실행하십시오.하지만 질문에 대한 내 이해에서, 그는 실제로 입찰 목록을 원하는 항목의 목록을 원하지 않습니다. 주어진 항목. – Elin

+0

예 - 정확합니다. 감사. 항목 목록이 있습니다. 항목 목록에 항목 당 입찰가를 표시하고 싶습니다. – larpo

관련 문제