Три стола в Laravel 5 с помощью моделей Eloquent

может быть, это простая проблема, но для меня, я новичок в Laravel, это проблема, поэтому у меня есть три стола

Статьи, Пользователь, Комментарии. У них есть эти отношения введите описание изображения здесь

На странице http://localhost/users/{user_name} Я хочу получить все статьи и все комментарии, которые принадлежат этому пользователю.

Три модели выглядят так:

пользователь

public function articles()
{
return $this->hasMany('App\Article');
}

public function comments()
{
return $this->hasMany('App\Comment');
}

Статья

public function user()
{
return $this->belongsTo('App\User');
}

public function comments()
{
return $this->hasMany('App\Comment');
}

а также

Комментарий

public function user()
{
return $this->belongsTo('App\User');
}

public function article()
{
return $this->belongsTo('App\Article');
}

Мой метод Controller Show выглядит следующим образом:

public function show(User $user)
{
$user->with(['comments','articles'])->get();

return view('users.show', compact('user', 'comments', 'articles'));
}

В виду у меня есть все что мне нужно

        {{ dump($user) }}
{{ dump($user->articles) }}
{{ dump($user->comments) }}
{{ dd() }}

введите описание изображения здесь

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

@foreach($user->comments as $comment)
<div class="block">
//article title
<div><a href="{{ url('articles', $comment->articles->title) }}"></a></div>
<div>{{ $comment->comment }}</div>
@endforeach

Чтобы показать статью, я использую название статьи, а не ID.

Спасибо

1

Решение

Первый, 'comments' а также 'articles' здесь ничего не делай.

return view('users.show', compact('user', 'comments', 'articles'));

Что касается ссылки,

<a href="{{ url('articles', [ $comment->article ]) }}">{{ $comment->article->title }}</a>
0

Другие решения

Я решил эту проблему, обновил свой контроллер:

public function show(User $user)
{
$params = Comment::where('user_id', $user->id)->get()

return view('users.show', compact('user', 'params'));
}

Это работает, как мне нужно, но я думаю, что есть лучший способ решить эту проблему.

0

По вопросам рекламы [email protected]