У меня есть четыре модели: пользователь, вопрос, ответ и голосование. Модели удовлетворяют следующим ограничениям:
- Пользователь может задавать много вопросов.
- У вопроса много ответов
- Ответ относится к одному вопросу.
- У ответа есть много голосов за, а также голосов против
(так же, как простой сайт ответов на вопросы)
Вот запрос, который я написал:
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)
- 1 - проголосовал за
- 2 - минус
Моя модель ответа
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);
}
Проголосовать за модель
public function answer()
{
return $this->belongsTo('App\Answer', 'id');
}
И это дает мне ожидаемые результаты от пользователей трех таблиц, вопросов и ответов.
Что я хочу добавить, так это то, проголосовал ли текущий вошедший в систему пользователь за конкретный ответ или нет. (например, Facebook показывает, что уже понравился пост с цветом). Как этого можно было добиться?
(если никто не вошел в систему, то нечего проверять. если пользователь вошел в систему, я хочу просто получить еще одну вещь, которая является истинной или ложной для каждой строки после присоединения)
Я не знаю, как добавить эту логику проверки, проголосовал ли пользователь, а затем получить истину или ложь.