php Laravel如何将多个表合并到一个视图中

kuarbcqp  于 2023-06-20  发布在  PHP
关注(0)|答案(1)|浏览(154)

我是Laravel的新手,遇到了一个陷阱。我尝试将两个表合并到视图中。
这是我的控制器,它引用了2个不同的模型。

// Models
use App\Models\Class_DateModel;
use App\Models\CourseModel;

class DataExcelAllController extends Controller
{
    public function index() {

        return view('welcome', [
            'Course' => CourseModel::select('Course_Name')->get(),
            'Class_Date' => Class_DateModel::select('Date', 'End_Date')->get()
        ]);
    }
}

//Initially, I tried to concat the two tables together as such:

<tbody>
            @php
                $i = 0;
                $MergedData = $Course->concat($Class_Date);
            @endphp

            <!-- Class Date -->
            @forelse ($MergedData as $Data1)
                <tr>
                        <td>{{ ++$i }}</td>
                        <td>{{ $Data1->Date }}</td>
                        <td>{{ $Data1->End_Date }}</td>
                        <td>{{ $Data1->Course_Name }}</td>
                </tr>
            @empty

            <!-- What's displayed if empty -->
            <tr>
                <td colspan="14" style="text-align: center">No Records</td>
            </tr>
            @endforelse
        </tbody>

但不管出于什么原因,table没有连在一起。为了说明,其中Key 1是表1的数据,而Key 2是表2的数据:
Class_DateTable->Key1,Key2,null null
Course_Table->null,null,Key1,Key2

42fyovps

42fyovps1#

看起来好像您正在尝试合并两个不同表CourseModelClass_DateModel中的数据,并在视图中显示合并后的数据。但是,直接连接这两个集合可能无法给予所需的结果,因为它们具有不同的结构。
要合并两个表中的数据,可以在控制器中使用循环来创建包含所需结构的新合并集合。下面是代码的更新版本:

use App\Models\Class_DateModel;
use App\Models\CourseModel;

class DataExcelAllController extends Controller
{
    public function index()
    {
        $courses = CourseModel::select('Course_Name')->get();
        $classDates = Class_DateModel::select('Date', 'End_Date')->get();

        $mergedData = collect();

        foreach ($classDates as $index => $classDate) {
            $course = $courses[$index] ?? null;
            if ($course) {
                $mergedData->push([
                    'Date' => $classDate->Date,
                    'End_Date' => $classDate->End_Date,
                    'Course_Name' => $course->Course_Name,
                ]);
            }
        }

        return view('welcome', [
            'MergedData' => $mergedData,
        ]);
    }
}

在这段代码中,我们迭代$classDates集合,并使用相同的索引访问$courses集合中的相应课程。然后,我们用所需的键(DateEnd_DateCourse_Name)创建一个新的关联数组,并将其推送到$mergedData集合。
最后,我们将$mergedData集合作为'MergedData'传递给视图,您可以在视图中迭代它,如下所示:

```html
<tbody>
    @forelse ($MergedData as $Data1)
        <tr>
            <td>{{ $loop->index + 1 }}</td>
            <td>{{ $Data1['Date'] }}</td>
            <td>{{ $Data1['End_Date'] }}</td>
            <td>{{ $Data1['Course_Name'] }}</td>
        </tr>
    @empty
        <tr>
            <td colspan="4" style="text-align: center">No Records</td>
        </tr>
    @endforelse
</tbody>

这里,我们使用数组语法(`$Data1['Date']`、`$Data1['End_Date']`和`$Data1['Course_Name']`)访问值,因为合并后的数据现在是一个关联数组的数组。

相关问题