Laravel以多对多关系访问数据透视表名称字段

时间:2018-04-24 07:31:50

标签: laravel many-to-many pivot-table

我正在从我的Sermon表中检索最新的4行,并将其传递给View Composer的视图。但我不知道我怎么能访问每个布道附带的标签     

namespace App\Http\ViewComposers;
use App\Sermon;
use App\Tags;

use Illuminate\View\View;

class SermonComposer
{
public function compose(View $view)
{

    $sermons = Sermon::take(4)->orderBy('id','DESC')->get();


    $view->with('sermons', $sermons );


}

}

如何访问与单个讲道相关的标签名称? 布道可以有多个标签

这就是我在讲道模型中的内容

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

这是我的刀片

 @foreach ($sermons as $sermon )
            <tr>
                <td>{{$sermon->id}}</td>
                <td>{{$sermon->title}}</td>

                <td>{{$sermon->pivot->name}}</td>
                <td><img src="{{ asset('img/sermons/'. $sermon->sermon_image)}}" alt=""></td>
                <td><a href="#">@include('svg.edit')</a></td>
            </tr>
        @endforeach

如果我{{dd($ sermons)}}这是我得到的,我注意到我的关系数组是空的

enter image description here

1 个答案:

答案 0 :(得分:2)

这是多对多的关系所以你应该使用复数名称作为关系,如

public function tags()
{
    return $this->belongsToMany('App\Tag');
}

定义关系后,您必须在使用with()查询时加载标记。

public function compose(View $view)
{

    $sermons = Sermon::with('tags')->take(4)->orderBy('id','DESC')->get();

    $view->with('sermons', $sermons );

}

然后在刀片视图中,您可以这样做

@foreach ($sermons as $sermon )
        <tr>
            <td>{{$sermon->id}}</td>
            <td>{{$sermon->title}}</td>
            @foreach ($sermon->tags as $tag )
            <td>{{$tag->name}}</td>
            @endforeach
            <td><img src="{{ asset('img/sermons/'. $sermon->sermon_image)}}" alt=""></td>
            <td><a href="#">@include('svg.edit')</a></td>
        </tr>
@endforeach
  

这只是我给你的问题可能有所不同的例子。如果您想要更具体的答案,请显示刀片视图。

如果您有任何疑问,请发表评论。