我有四个模型:用户,问题,答案和Upvote。模型满足以下约束条件:
(就像一个简单的问题答案网站)
这是我写的查询:
DB::table('questions')
->join('answers', 'answers.question_id', '=', 'questions.id')
->join('users', 'users.id', '=', 'answers.user_id')
->select('answers.answer_content as answer_content',
'answers.created_at as created_at',
'users.name as name',
'users.id as u_id',
'users.user_slug as user_slug'
)
->orderBy('answers.created_at', 'desc')
->get();
Upvotes表包含列:
user_id, answer_id, upvote(booolean 1 or 0)
我的答案模式
public function upvote()
{
return $this->hasMany('App\Upvote', 'answer_id')->where('upvote', 1);
}
public function downvote()
{
return $this->hasMany('App\Upvote', 'answer_id')->where('upvote', 0);
}
Upvote模型
public function answer()
{
return $this->belongsTo('App\Answer', 'id');
}
它为我提供了三个表用户,问题和答案的预期结果。
我想要添加的内容是当前登录的用户是否对其进行了特定的回答。 (就像Facebook的节目已经在一个有颜色的帖子上喜欢)。如何实现这一目标?
(如果没有人登录,则无需检查。如果用户已登录,那么我想在加入后再获得一行真或假的每一行)
我不知道如何添加此检查逻辑是否用户已经upvoted然后得到true或false。
答案 0 :(得分:0)
给出Answer
:
$answer = Answer::find(1);
您可以使用经过身份验证的用户ID进行搜索:
$user = $answer->upvotes()->where('user_id', auth()->id())->first();
if ($user) {
// user has voted
} else {
// user has not voted
}
或者另一种方式是:
$upvote = Upvote::where(['answer_id' => $answer->id, 'user_id' => auth()->id()])->first();