(laravel4)用标签打印帖子

时间:2014-06-20 16:31:00

标签: laravel eloquent relationship

我尝试打印我的标签以及我的帖子(名为教程)。

class HomeController extends BaseController
{
    public function index()
    {
        $tutorials = Tutorial::where('draft', '=', 0)->get();
        $tags = $tutorials->first()->tags()->get();

        return View::make('home', array(
            'tags' => $tags,
            'tutorials' => $tutorials
        ));
    }
}

如果我这样做有效,但显然我总是得到第一个标签,而不是属于教程的标签。我从昨天开始就试图让它上班,但我又被卡住了......

教程模型:

class Tutorial extends Eloquent {
    protected $table = 'tutorials';

    public function tags() {
        return $this->belongsToMany('Tag', 'tutorials_tags', 'tutorial_id');
    }
}

标记模型:

class Tag extends Eloquent {
    protected $table = 'tags';

    public function tutorials() {
        return $this->belongsToMany('Tutorial', 'tutorials_tags', 'tag_id');
    }
}

主页视图:

@foreach($tutorials as $tutorial)

    <p>{{$tutorial->title}}</p>
    <p>{{$tutorial->body}}</p>

    @foreach($tags as $tag)
        <p><b>Tags:</b> {{$tag->name}}</p>
    @endforeach

    <br>

@endforeach

1 个答案:

答案 0 :(得分:0)

您的控制器代码有点含糊不清,我假设您要列出所有教程,以及与每个教程相关的标签。

你可以利用Laravel的急切加载,提示:with('tags')。基本上它会告诉Laravel,嘿,当你为我提取教程时,将它们带回“带有他们的标签”。所以你不需要像你想要的那样单独获取标签。

所以在你的HomeController中:

class HomeController extends BaseController
{
    public function index()
    {
        $tutorials = Tutorial::with('tags')->where('draft', '=', 0)->get();

        return View::make('home', array(
            'tutorials' => $tutorials
        ));
    }
}

您的观点:

@foreach($tutorials as $tutorial)

    <p>{{$tutorial->title}}</p>
    <p>{{$tutorial->body}}</p>

    @foreach($tutorial->tags as $tag)
        <p><b>Tags:</b> {{$tag->name}}</p>
    @endforeach

    <br>

@endforeach