如何使用两个表laravel来预取来自同一数据库的数据

时间:2018-01-25 02:20:14

标签: php mysql laravel foreach

我已经编写了一个代码来查看数据,但我遇到了一些问题。

从代码中,我写了它正在查看一个表$details的数据。但我也想查看$ detailsAns中的数据。

我该怎么做?另外,我可以foreach来自这两个表的两个数据吗?

我的代码如下:

public function queries($companyID, $entityType, $entityValue)
{
    $data = [];
    $details = DiraQuestion::where('company_id', $companyID)->where('eType', $entityType)->where('eVal', $entityValue)->get();
    $detailsAns = DiraResponses::where('company_id', $companyID)->where('eType', $entityType)->where('eVal', $entityValue)->get();

    foreach($details as $key => $detailsValue)
    {
        if(!array_key_exists($detailsValue->intent, $data))
        {
        $data[$detailsValue->intent] = [];
        }

        if(!array_key_exists($detailsValue->reply, $data[$detailsValue->intent]))
        {
            $data[$detailsValue->intent]['answer'][$detailsValue->reply] = $detailsValue->id;
        }

        if(!array_key_exists($detailsValue->queries, $data[$detailsValue->intent]))
        {
            $data[$detailsValue->intent]['question'][$detailsValue->queries] = $detailsValue->id;
        }
    }

    ksort($data);
    return view('AltHr.Chatbot.queries', compact('data','entityType','entityValue','companyID'));
}

因为您可以看到我可以从foreach返回$details的数据,但现在我还想返回$ detailsAns的数据。我怎么能这样做?

我的数据库结构:

表1: enter image description here

表2: enter image description here

所以要获取数据首先必须选择公司ID,eType,eVal和intent,所以现在我需要显示回复和查询。

我想要的输出如下: enter image description here

所以你可以看到我可以在foreach中输出问题表。如果我将foreach更改为$ detailsAns然后我显示回复..但我现在要查看两者

1 个答案:

答案 0 :(得分:1)

从提供的表格如何相互关联的数据中不是很清楚。如果答案与问题具有相同的id值,则很容易通过构造数组来关联它们,以便它们由公共值键入。

$data = [];

$details = DiraQuestion::where('company_id', $companyID)->where('eType', $entityType)->where('eVal', $entityValue)->get();
foreach ($details AS $datum) {
    if (!isset($data[$datum->intent])) $data[$datum->intent] = ['question' => [], 'answer' => []];
    $data[$datum->intent]['question'][$datum->id] = $datum->queries;
}

$detailsAns = DiraResponses::where('company_id', $companyID)->where('eType', $entityType)->where('eVal', $entityValue)->get();
foreach ($detailsAns AS $datum) {
    if (!isset($data[$datum->intent])) $data[$datum->intent] = ['question' => [], 'answer' => []];
    $data[$datum->intent]['answer'][$datum->id] = $datum->reply;
}

此时,由于您说数据集之间没有关系,只需将data数组传递给您已有的视图:

return view('AltHr.Chatbot.queries', compact('data','entityType','entityValue','companyID'));

循环遍历两个数据元素,在视图中打印出值:

@foreach ($data['approval-document']['question'] as $id=>$question)
<p>Question #{{ $id }}: {{ $question }}</p>
@endforeach

@foreach ($data['approval-document']['answer'] as $id=>$answer)
<p>Answer #{{ $id }}: {{ $answer }}</p>
@endforeach