У меня есть схема базы данных, которая выглядит так:
user
id
name
question
id
title
answer
id
answer_text
user_id
question_id
Теперь я хочу выбрать всех пользователей со всеми вопросами и пользователями, ответив на каждый вопрос.
Я пытаюсь таким образом:
Модель пользователя
public function answer()
{
return $this->hasMany('answers','user_id','question_id');
}
Модель ответа
public function question()
{
return $this->belongsTo('questions','question_id');
}
Теперь звоните из пользовательского контроллера
$user_profile = User::find($userid);
Но он дает только данные пользовательской таблицы и не возвращает вопросов и ответов.
Я думаю, что вы можете использовать отношение «есть много через». Поскольку вы используете Eloquent, попробуйте этот пример.
Решение для вашего вопроса «EAGER LOADING», давайте посмотрим, как мы можем использовать это для вашей ситуации.
$user_profile = User::with('answer')->find($userid);
это не даст вам вопроса от этого пользователя, причина в том, что вы пропустили связь между пользователем и вопросом.
Сказав выше, вы можете получить ответы, и, поскольку каждый ответ имеет отношение к вопросу, вы можете получить вопрос, но не идеальный способ сделать это.
Предложение
ваши отношения и модели не подходят, этого может быть достаточно для того, что вам нужно, но по мере роста вашего приложения вы столкнетесь с рядом проблем.
Если бы я сделал это, мои отношения были бы другими, включая структуру БД. Например:
Пользователь: идентификатор, имя, …..
Вопрос: идентификатор, название, …
Ответ: id, ответ, …
UserQuestion: это должна быть сводная таблица пользователя & Вопрос [user_id, question_id]
UserAnswer: это должна быть сводная таблица пользователя & Ответ [user_id, answer_id]
Вопрос ответ: это должна быть сводная таблица вопросов & Ответить [question_id, answer_id]
У вас может быть другой сценарий этой сводной таблицы, который вы можете использовать с помощью User_Question_Answer [user_id, question_id, answer_id], но это зависит от потребностей вашего приложения.