(laravel4) распечатка сообщений с тегами

#laravel #eloquent #relationship

#laravel #красноречивый #взаимосвязь

Вопрос:

Я пытаюсь распечатать свои теги вместе с моими сообщениями (которые называются учебными пособиями).

 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. Можете ли вы также прикрепить код для home представления?

2. Привет, ты снова ^^ Теперь прикреплен домашний просмотр. Еще раз спасибо.

3. Итак, вы хотите перечислить все учебные пособия вместе с тегами, связанными с каждым? Или вы хотите получить только первое руководство с его тегами?

4. Я хочу получить все учебные пособия вместе с соответствующими тегами.

5. Я бы посоветовал вам отредактировать заголовок на что-то вроде «Как выводить красноречивые модели с их отношениями?»

Ответ №1:

Код вашего контроллера немного неоднозначен, я предполагаю, что вы хотите перечислить все учебные пособия вместе с тегами, связанными с каждым учебным пособием.

Для этого вы можете использовать быструю загрузку 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
  

Комментарии:

1. Спасибо! В очередной раз мне помогло, ты мой герой. Большое спасибо

2. В следующий раз я предоставлю только подсказки! : p