我想如果支票用户已对某些帖子投了票。而且我想以某种方式在视图中使用这个where子句。有可能吗?
$used = Vote::where('post_id', $id)
->where('user_id', Auth::user()->id)
->first();
我可以使用@if
以某种方式在Blade中写这个吗?
EDT
当我这样做时:
User model
:
public function vote()
{
return $this->hasMany('App\Vote');
}
public function voted($postId)
{
return $this->vote()->where('post_id', $postId)->count() > 0;
}
PostsController
:
return view('index', compact('posts'))->with('user', Auth::user());
在我看来:
@if ($user->voted($postId))
// some button
@endif
我得到:Undefined variable: postId
这是我的路线:
Route::get('/', 'PostsController@index');
答案 0 :(得分:0)
不要在视图中直接使用查询。如何为此目的在User
模型上定义方法。下面的解决方案假设您与您在User
模型上定义的用户投票有关系。
所以你应该在User
模型中使用它:
public function votes()
{
return $this->hasMany(App\Votes::class);
}
public function voted($postId)
{
return $this->votes()->where('post_id', $postId)->count() > 0;
}
然后在您的路线关闭或控制器操作中,您可以返回:
return view('yourview')->with('user', Auth::user());
或者只使用View Sharing,这样您就不必每次都将经过身份验证的用户传递给视图:
view()->share('user', Auth::user());
然后你的Blade视图文件就可以写下来了:
@if ($user->voted($postId))
<!-- Do your stuff -->
@endif
答案 1 :(得分:0)
@if ($user->voted($postId)) // in this place you need $postId defined
// some button
@endif
要做到这一点,你需要将$ postId扔到viewbag
return view('yourview')
->with('user', Auth::user())
->with('postId', $currentPostId); //change $currentPostId to your
//variable, probably like: $post->id
或者,如果您要遍历所有帖子,则需要将其从帖子模型中获取:
@for($posts as $post)
//...
@if ($user->voted($post->id))
//...
@endif
//...
@endfor
希望它能回答你的问题;)