2017-06-05 78 views
2

我正在通过关系命令通过关系hasMany。如果我以第二种方式订购,不起作用,我知道我必须在第一个方面做到这一点,但我该怎么做? 也许我可以在控制器中做到这一点,但我不知道如何。这是我的代码:Laravel 5.4 OrderBy通过一个关系

在视图:

​​

在变量的关系:

public function langs() 
{ 
    return $this->hasMany('App\Models\LangTag'); 
} 

在LangTag的关系:

public function tag() 
{ 
    return $this->belongsTo('App\Models\Tag'); 
} 

控制器:

public function index() 
    { 
     $data['tags'] = Tag::paginate(25); 
     return view('panel.tags.index', compact('data')); 
    } 

回答

0
public function langs() 
{ 
    return $this->hasMany('App\Models\LangTag')->orderBy('name'); 
} 

或像这样:

public function index() 
{ 
    $data['tags'] = Tag::all()->langs()->orderBy('name')->paginate(25); 
    return view('panel.tags.index', compact('data')); 
} 
0

您可以在订购贪婪加载它,而你抓取代码。更清洁的解决方案。

public function index() 
{ 
    $tags = Tag::with('langs')->paginate(25); 

    return view('panel.tags.index', compact('tags')); 
} 

@foreach($tags as $tag) 
<tr> 
    <td>{{ $tag->created_at->format('d-m-Y') }}</td> 
    <td> 
     @foreach($tag->langs->sortBy('name') as $lang) 
      @include('panel.partials.list_name', [ 
       'value' => $lang, 
       'route' => 'tags.edit', 
       'id' => $tag->id, 
       'name' => $lang->name 
      ]) 
     @endforeach 
    </td> 
</tr> 
@endforeach 
+0

谢谢Sandeesh,但不起作用。没有任何反应。 – nature

+0

@nature你能更精确吗?这只是您的代码与加载的急切加载的翻译。你是否改变了控制器和视图代码? – Sandeesh

+0

是的,我改变了控制器和视图,就像你最干净的代码一样。但结果是一样的,它不是按名称排序的。是的,渴望加载被添加。 – nature