Laravel 4.2 ORM — запрос отношения с тремя таблицами

У меня есть схема базы данных, которая выглядит так:

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);

Но он дает только данные пользовательской таблицы и не возвращает вопросов и ответов.

1

Решение

Я думаю, что вы можете использовать отношение «есть много через». Поскольку вы используете Eloquent, попробуйте этот пример.

0

Другие решения

Решение для вашего вопроса «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], но это зависит от потребностей вашего приложения.

0

По вопросам рекламы [email protected]