Как получить данные из объединенной таблицы с определенным условием? - PullRequest
0 голосов
/ 06 октября 2019

У меня есть 3 таблицы с именами пользователей, вопросов и ответов. Я получил все ответы из таблицы ответов для конкретного вопроса. Теперь мне нужно получить имя всех пользователей, ответивших на вопрос.

Вот так теперь выглядит мой контроллер:

    public function show($id)
    {
        $question['question'] = Question::find($id);

        // fetch all answers where answer table question_id == question_id

        $question['answers'] = Answer::where('question_id', $question_id)->get();

        //fetch user data who answered the question

        $question['users'] = ?

        return $question;

    }

Табличные отношения:

В пользователе

    public function questions()
    {
        return $this->hasMany(Question::class);
    }

В вопросе

    public function user()
    {
        return $this->belongsTo(User::class);
    }


    public function answers()
    {
        return $this->hasmany(Answer::class);
    }

В ответе

    public function question()
    {
        return $this->belongsTo(Question::class);
    }


    public function user()
    {
        return $this->belongsTo(User::class);
    }

В представлении мне нужно: Вопрос + Все ответы на вопрос с именем пользователя, который ответил.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 06 октября 2019

Вы можете быстро загрузить отношение answers.user в вопросе.

Question::with('answers.user')->where('id', $id)->first();

, которое будет извлекать:

  1. Вопрос
  2. С массивомответы
  3. С пользователем, принадлежащим к каждому ответу.
0 голосов
/ 06 октября 2019

Вы можете записать динамическую область в класс User, который будет извлекать пользователей, только если вопрос найден среди его отношений:

    public function scopeOfQuestion($query, $questionId)
    {
        return $query->whereHas('questions', function ($query) use ($questionId) {
            $query->where('id', $questionId);
        });
    }
public function show($id)
    {
        $question = Question::find($id);
        $users = User::ofQuestion($question->getKey())->get();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...