编辑3:原因可能是因为两个控制器都指向同一页?
编辑2:我得到的答案后仍然没有工作。
编辑:错误一解决了,现在我得到了:
未定义的变量:project(查看: /var/www/resources/views/pages/showProject.blade.php)
这可能是因为两个变量都导致同一页面?项目变量在评论系统之前完美运行。
public function index()
{
$projects = Project::all();
return view('pages.projects', compact('projects'));
}
项目变量声明。
我正在尝试从我的数据库中获取我的评论,以便在我正在进行的laravel 5项目中的特定“项目页面”上显示。想法是用户可以添加艺术项目,其他用户可以对它们进行评论,但每当我尝试访问该页面时,我都会得到
未定义的变量:评论(查看: /var/www/resources/views/pages/showProject.blade.php)
这是我的控制器
public function index()
{
$comments = Comment::all();
return view('pages.showProject', compact('comments'));
}
public function store()
{
$input = Request::all();
$comment = new Comment;
$comment->body = $input['body'];
$comment->project_id = $input['project_id'];
$comment->user_id = Auth::user()->id;
$comment->save();
return redirect('projects/'.$input['project_id']);
}
这些是我的路线
// add comment
Route::post('projects/{id}','CommentController@store');
// show comments
Route::post('projects/{id}','CommentController@index');
我的观点
@if (Auth::check())
<article> <!--Add comment -->
<br/>
{!! Form::open() !!}
{!! form::text('body', null, ['class' => 'form-control']) !!}
<br/>
{!! Form::Submit('Post Comment', ['class' => 'btn btn-primary form-control']) !!}
{!! Form::hidden('project_id', $project->id) !!}
{!! Form::close() !!}
<br/>
</article>
<article>
@foreach ($comments as $comment)
<article>
<p>Body: {{ $comment->body }}</p>
<p>Author: {{ $comment->user->name }}</p>
</article>
@endforeach
</article>
@else
<p>Please log in to comment</p>
@endif
模特
class Comment extends Model
{
//comments table in database
protected $guarded = [];
// user who has commented
public function author()
{
return $this->belongsTo('App\User','user_id');
}
// returns post of any comment
public function post()
{
return $this->belongsTo('App\Project','project_id');
}
public function comments()
{
return $this->hasMany('App\Comment');
}
public $timestamps = false;
}
有什么方法可以解决这个问题吗?
提前致谢
答案 0 :(得分:1)
首先,您需要确保您对“评论”的别名。控制器中的模型。这是通过use
语句完成的。
use App\Comment;
class CommentController extends Controller
{
public function index()
{
$comments = Comment::all();
return view('pages.showProject', compact('comments'));
}
}
其次,您需要更改路径以显示POST请求中的注释到GET请求。目前您正在制作相同的路线,而且GET是检索数据的正确请求类型。
Route::get('projects/{id}','CommentController@index');
第三,您在视图中引用了$ project变量,但从未将其从控制器中传入。这需要引用一些东西。
答案 1 :(得分:0)
我认为你们的关系是错误的。试试这个:
评论模型:
class Comment extends Model
{
public function user()
{
return $this->belongsTo('App\User');
}
}
用户模型:
class User extends Model
{
public function comments()
{
return $this->hasMany('App\Comment');
}
}
在视图中,您可以使用:
@foreach($comments as $comment)
<p>{{ $comment->user->name }}</p>
@endforeach
答案 2 :(得分:0)
我需要清空commentsController中的节目,只用它来保存评论。为了展示它们,我在我的projectsController中创建了一个额外的函数。它最终成了这个;
public function show($id)
{
$project = Project::findOrFail($id)->load("User");
$input = Request::all();
//-----------------------DB-----------------------------//
$project_comments = DB::table('comments')
->select('body', 'name')
->where('project_id', '=', $id)
->join('users', 'users.id', '=', 'user_id')
->get();
//-----------------------DB-----------------------------//
return view('pages.showProject', ['project' => Project::findOrFail($id), 'comments' => $project_comments]);
}