我正试图通过关系hasMany来命名。如果我在第二次预告中订购,不起作用,我明白我必须在第一次预告中这样做但我怎么能这样做? 也许我可以在控制器中做到这一点,但我不知道如何。这是我的代码:
在视图中:
@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
Tag中的关系:
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 :(得分: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'));
}
答案 1 :(得分: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