简体   繁体   English

Laravel 5.4 OrderBy通过关系

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM