Laravel - несколько контроллеров в представлении - PullRequest
0 голосов
/ 30 сентября 2018

Я пытаюсь закодировать простую страницу в социальных сетях.В представлении шоу должно отображаться сообщение со всеми комментариями к этому конкретному сообщению, перечисленному ниже.

Я испробовал несколько разных подходов, но безуспешно, это подход, который, как мне кажется, может быть близок к успехуЛюбые предложения?

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

web.php

Route::resource('post', 'PostController');
Route::resource('post', 'CommentController');

show.blade.php

<h1>{{$post->title}}</h1>
<p>Description: {{$post->description}}</p>

<h3>Comments</h3>
<ul>
  @foreach ($comments as $comment)
    <li>
      User: {{$comments->user_name}} <br>
      Comment: {{$comments->comment}} <br>
    </li><br>
  @endforeach
</ul>

PostController.php

public function show($id)
{
  $post= Post::find($id);
  return view('post.show')->with('post', $post);
}

CommentController.php

public function show($id)
{   
    $comments= Comment::find($id);
    return view('post.show')->with('comments', $comments);

}

РЕДАКТИРОВАТЬ 1

Post.php

class Post extends Model
{
    protected $fillable = ['title', 'description'];

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

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

}

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

сначала установите отношение между моделью сообщения и комментария

в модели сообщения

class Post extends Model
{
    public function comments(){
        return $this->hasMany(Comment::class);
    }
}

в модели комментария

class Comment extends Model
{
    public function post(){
        return $this->belongsTo(Post::class);
    }
}

контроллер сообщения

public function show($id)
{
  $post= Post::find($id);
  return view('post.show')->with('post', $post);
}

Запись в блейд-файл

<h1>{{$post->title}}</h1>
<p>Description: {{$post->description}}</p>

    <h3>Comments</h3>
    <ul>
      @foreach ($post->comments as $comment)    //get all the comments related to this post
        <li>
          User: {{$comment->user_name}} <br>
          Comment: {{$comment->comment}} <br>
        </li><br>
      @endforeach
    </ul>
0 голосов
/ 30 сентября 2018

Вы можете получить обе данные, установив отношения между вашими моделями

Я думаю, что в ваших двух моделях отношение будет таким,

Пост-модель

namespace App\Post;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    public function comments(){
        return $this->hasMany(Comment::class);
    }
}

Модель комментария:

namespace App\Comment;

use Illuminate\Database\Eloquent\Model;

class Comment extends Model
{
    public function post(){
        return $this->belongsTo(Post::class);
    }
}

, поэтому, если вы хотите вернуть данные для просмотра,

PostController.php

 public function show($id)
    {
      $post= Post::with('comments')->find($id);
      $data = [
            'post' => $post,
            'comments' => $post->comments,
      ];
      return view('post.show', $data);
    }

CommentController.php

 public function show($id)
{   
    $comments= Comment::with('post')->find($id);
    $data = [
        'post' => $comments->post,
        'comments' => $comments,
    ];
    return view('post.show' , $data);
}

Для более подробной информации: https://laravel.com/docs/5.7/eloquent

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...