#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