[英]Laravel 5.4 OrderBy through a relationship
I´m triying to order by name through a relationship hasMany. 我试图通过关系hasMany按名称排序。 If I order in second foreach, doesn't work, I´m understand that I have to do that on the first foreach but How can I do that?
如果我在第二个foreach中订购,则不起作用,我了解我必须在第一个foreach中执行该操作,但是我该怎么做? Maybe I can do that in the Controller but I don´t know how.
也许我可以在Controller中做到这一点,但我不知道如何做。 This is my code:
这是我的代码:
In the view: 在视图中:
@foreach($data['tags'] as $tag)
<tr>
<td>{!! date('d-m-Y', strtotime($tag->created_at)) !!}</td>
<td>
@foreach($tag->langs()->orderBy('name', 'asc')->get() as $tag_lang)
@include('panel.partials.list_name', ['value' => $tag_lang, 'route' => 'tags.edit', 'id' => $tag->id, 'name' => $tag_lang->name])
@endforeach
</td>
</tr>
@endforeach
The relationship in Tag: 标签中的关系:
public function langs()
{
return $this->hasMany('App\Models\LangTag');
}
The relationship in LangTag: LangTag中的关系:
public function tag()
{
return $this->belongsTo('App\Models\Tag');
}
The controller: 控制器:
public function index()
{
$data['tags'] = Tag::paginate(25);
return view('panel.tags.index', compact('data'));
}
public function langs()
{
return $this->hasMany('App\Models\LangTag')->orderBy('name');
}
or like this: 或像这样:
public function index()
{
$data['tags'] = Tag::all()->langs()->orderBy('name')->paginate(25);
return view('panel.tags.index', compact('data'));
}
You can eager load it with ordering while you fetch tags. 您可以在获取标签时急于通过排序加载它。 Cleaner solution.
更清洁的解决方案。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.