2017-05-24 1 views
0

私は$ belongsToカテゴリの関係を持つドキュメントモデルを持っていますが、すべてうまくいきますし、ドキュメントにカテゴリを割り当ててフロントエンドにリストすることはできますが、 withはカテゴリ別の結果をフィルタリングしています。カテゴリをLaravelでカテゴリ別にフィルタリングする

私は3つのカテゴリと3つのcol-md-4カラムを持っていますが、各カラムにはドキュメントがカテゴリ別にリストされ、フィルタリングされていなければなりません。

{% set documents = __SELF__.documents %} 
<ul class="record-list list-unstyled "> 
    {% for document in documents %} 
     <li class="ul-text-black">  
       {{document.name }} 
     </li> 
    {% endfor %} 
</ul> 

マイドキュメントのコンポーネントコード:

マイdocuments.defaultコンポーネントファイルは、次のようになります

<?php namespace Myplugin\Documents\Components; 

    use Cms\Classes\ComponentBase; 
    use Myplugin\Documents\Models\Document; 

    class Documents extends ComponentBase 
    { 
    public function componentDetails(){ 
    return [ 
     'name' => 'Documents List', 
     'description' => 'Custom Component to list documents by category' 
    ]; 
} 

public function defineProperties(){ 
    return [ 
     'results' => [ 
      'title' => 'Number of Documents', 
      'description' => 'How many documents do you want to display?', 
      'default' => 24, 
      'validationPattern' => '^[0-9]+$', 
      'validationMessage' => 'Only numbers allowed' 
     ], 
     'sortOrder' => [ 
      'title' => 'Sort Documents', 
      'description' => 'Sort documents', 
      'type' => 'dropdown', 
      'default' => 'name asc', 
     ]]; 
    } 

public function getSortOrderOptions(){ 
    return [ 
     'name asc' => 'Name (ascending)', 
     'name desc' => 'Name (descending)', 
    ]; 
} 

public function onRun() 
{ 
    $this->documents = $this->loadDocuments(); 
} 

protected function loadDocuments(){ 
    $query = Document::all(); 
    if ($this->property('sortOrder') == 'name asc') { 
     $query = $query->sortBy('name'); 
    } 
    if ($this->property('sortOrder') == 'name desc') { 
     $query = $query->sortByDesc('name'); 
    } 
    if ($this->property('results') > 0) { 
     $query = $query->take($this->property('results')); 
    } 
    return $query; 
} 
public $documents; 
} 

マイページは、私が表示されますどのようにこの

<div class="row"> 
    <div class="col-md-4"> 
     <p class="text-black"> 
       <strong>FINANCIAL</strong> 
     </p> 
      {% component 'documents' %} // Only documents from financial category 
    </div> 

    <div class="col-md-4"> 
     <p class="text-black"> 
      <strong>ANALYTICS</strong> 
     </p> 
     {% component 'documents' %} // Only documents from analytics category 
    </div> 

    <div class="col-md-4"> 
     <p class="text-black"> 
      <strong>INVESTMENT</strong> 
     </p> 
     {% component 'documents' %} // Only documents from investment category 
    </div> 

のように見えますドキュメントリストをフィルタリングしますが、カテゴリ別にフィルタリングしますか?このようなもの? {%部分「ドキュメント・財務」カテゴリ=「金融」%}

答えて

1

あなたが使用して、ドキュメントのコンポーネントのプロパティにアクセスすることができるはず$category = $this->property('category');

OctoberCMSのウェブサイト上のコンポーネントのプロパティにアクセスするにドキュメントがあります:https://octobercms.com/docs/plugin/components#component-properties

次に、すべてのドキュメントを読み込み、Laravel Collectionを使用してそれらをフィルタリングしていることがわかります。私はこれを変更し、まずデータベース上で行うことをお勧めします。それははるかに効率的になります。あなたがグループにあなたの文書、その後、出力、それらをしたい場合は、次の操作を行うことができ

$category = $this->property('category');  
$results = $this->property('results');  

$documents = Document::whereHas('category', function ($query) use ($category) { 
     return $query->where('name', $category); 
    }) 
    ->orderBy('name', 'ASC') 
    ->take($results) 
    ->get(); 

$this->documents = Document::with('category') 
    ->orderBy('name', 'ASC') 
    ->take($results) 
    ->get() 
    ->groupBy('category.name'); 

コンポーネントテンプレートに続いてhttps://laravel.com/docs/5.3/collections#method-groupby

を参照してください:

<div class="row"> 
    {% for group in documents %} 
     <div class="col-md-4"> 
      <p class="text-black"> 
       <strong>FINANCIAL</strong> 
      </p> 

      <ul class="record-list list-unstyled"> 
       {% for document in group %} 
        <li class="ul-text-black">{{document.name }}</li> 
       {% endfor %} 
      </ul> 
     </div> 
    {% endfor %} 
</div> 
+0

カテゴリ別にグループ化して表示するには、どのようにフィルタリングしますか? –

+0

あなたの質問から、それはあなたのコンポーネントの別のインスタンスを各カテゴリに使用しているかのように見えますか?それともそれじゃないの? – fubar

+0

カテゴリには1つのコンポーネントがあります。 OctoberCMSとコンポーネント/ページのMVCへのアプローチは初めてです。 –

関連する問題