Как я могу объединить таблицу, которая имеет два user_id и отображать в представлении - PullRequest
0 голосов
/ 31 августа 2018

У меня проблема с просмотром в Laravel

Допустим,

User
id|user_name|
1 |Amy|
2 |Bob|
3 |Candy|
4 |Dina|
5 |Edwin|

Product
id|product_name|
1 |iPhone 10|
2 |Galaxy 10|
3 |Huawei P10|
4 |Vivo R10|
5 |Xiaomi 10|

Q&A
id| Question |    Answer   |ask_user_id|ans_user_id|Product_id|
1 |Question 1|Answer For Q1|     5     |     1     |     1    |
2 |Question 2|Answer For Q2|     4     |     2     |     3    |
3 |Question 3|Answer For Q3|     3     |     4     |     3    |
4 |Question 4|Answer For Q4|     2     |     4     |     4    |
5 |Question 5|Answer For Q5|     1     |     5     |     5    |

Я хочу, чтобы пользователи задавали вопрос и пользователи отвечали на вопрос.

Таким образом, управление:

public function getProductDetail($id) {            
/*
Get Questions and Answers Q&A section
*/
    //Get questions here
    $sql = "SELECT USER.user_name as askUser, QA.question as theQuestion, QA.date_of_post FROM USER, QA WHERE id IN (SELECT ask_user_id FROM QA WHERE product_id = ?) AND USER.id = QA.ask_user_id";
    $questions = DB::select($sql, array($id));

   //Get answers here
   $sql = "SELECT USER.user_name as ansUser, QA.answer FROM USER, QA WHERE id IN (SELECT ans_user_id FROM QA WHERE product_id = ?)AND USER.id = QA.ans_user_id";
   $answers = DB::select($sql, array($id));

   return view('includes.products.productDetail', 
    ['questions' => $questions, 'answers' => $answers]);
}

По-моему, я написал такой код:

<div class="QA">
 <h2>Questions and Answers</h2>
  <div class="question">
   <ul class="list-unstyled">
    @foreach($questions as $question)
       <div class="shadow p-3 mb-5 bg-white rounded">
         <li>{{ $question -> theQuestion }}</li>
         <li>{{ $question -> askUser }} asked on {{ $question -> date_of_post}}</li>
         </div>
    @endforeach

    @foreach($answers as $answer)
         <li>{{ $answer -> answer }}</li>
         <li>{{ $answer -> ansUser}}</li>
    @endforeach
  </ul>
   </div>
</div>

Я пробовал по-разному, но вопрос и результаты всегда отображаются отдельно. Я хочу, чтобы они отображались в формате:

Q & A

Question 1
author

Answer section
ansUser1  answer
ansUser2  answer
_________________
Question 2
author

Answer section
ansUser3  answer
ansUser4  answer
_________________
Question 3
author

Answer section
ansUser2  answer
ansUser3  answer

Я не уверен, что проблема связана с моим взглядом или с SQL. Цените !!

1 Ответ

0 голосов
/ 31 августа 2018

Один из способов добиться этого - зациклить все ответы на каждый вопрос, а затем проверить, соответствует ли ответ на вопрос. (не лучшим образом, но все же, будет работать)

Для этого получите идентификатор вопроса в ответе. Запрос

$sql = "SELECT USER.user_name as ansUser, QA.answer, QA.question, FROM USER, QA WHERE id IN (SELECT ans_user_id FROM QA WHERE product_id = ?)AND USER.id = QA.ans_user_id";

Затем измените цикл foreach

@foreach($questions as $question)
    <div class="shadow p-3 mb-5 bg-white rounded">
         <li>{{ $question -> theQuestion }}</li>
         <li>{{ $question -> askUser }} asked on {{ $question -> date_of_post}}</li>

         @foreach($answers as $answer)
             @if($answer->question == $question->theQuestion)
                <li>{{ $answer -> answer }}</li>
                <li>{{ $answer -> ansUser}}</li>
            @endif
         @endforeach
    </div>
@endforeach
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...