Laravel 5.2怎么写这个where子句在视图中?

时间:2016-02-26 21:38:44

标签: php laravel

我想如果支票用户已对某些帖子投了票。而且我想以某种方式在视图中使用这个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');

2 个答案:

答案 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

希望它能回答你的问题;)