【问题标题】:Displaying results as single row将结果显示为单行
【发布时间】:2020-07-05 02:42:46
【问题描述】:

我被困住了。描述我的问题的最简单方法是上传屏幕截图;)

Absences - index.blade.php

我正在实施缺勤系统。这些红色徽章在学生缺席时显示,在学生在场时显示灰色。

我想将这三行显示为一行,因为它们具有相同的“created_at”字段,但老实说,我不知道该怎么做。所以请帮助我,如果可以的话:)

这是我的源代码:

(CreateAbsencesTable.php)

    public function up()
{
    Schema::create('absences', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('student_id')->unsigned();
        $table->integer('teacher_id')->unsigned();
        $table->integer('lesson')->unsigned();
        $table->string('status');
        $table->string('comment')->nullable();
        $table->timestamps();
    });
}

(AbsenceController@index)

    /**
 * Display a listing of the resource.
 *
 * @return \Illuminate\Http\Response
 */
public function index()
{
    if (auth()->user()->hasRole('student')) {
        $absences = Absence::orderBy('created_at')->where('student_id', auth()->user()->id)->get();

        // dd($absences);

        return view('absences.index', compact('absences'));
    }
}

(资源/视图/缺席/index.blade.php)

                    @role('student')
                    <table class="table table-borderless table-striped shadow-lg mb-5">
                        <thead>
                            <tr>
                                <th class="align-middle pl-3 w-25">{{ __('Date') }}</th>
                                <th class="align-middle pl-3">{{ __('Lesson') }}</th>
                            </tr>
                        </thead>
                        <tbody>
                            @foreach ($absences as $absence)
                                <tr>
                                    <td class="align-middle pl-4 w-25">{{ $absence->created_at }}</td>
                                    <td class="align-middle pl-4">
                                        @for ($i = 1; $i <= 8; $i++)
                                            @if ($i == $absence->lesson)
                                                <span class="badge badge-pill badge-danger my-second-badge">
                                                    {{ $i }}
                                                </span>
                                            @else
                                                <span class="badge badge-pill badge-secondary my-second-badge">
                                                    {{ $i }}
                                                </span>
                                            @endif
                                        @endfor
                                    </td>
                                </tr>
                            @endforeach
                        </tbody>
                    </table>
                @endrole

感谢您的帮助。祝你有美好的一天!

【问题讨论】:

    标签: php laravel eloquent laravel-blade


    【解决方案1】:

    首先在 index() 操作中的控制器中,您需要按 created_at 对 $absences 进行分组

    public function index()
    {
        if (auth()->user()->hasRole('student')) {
            return view('absences.index', [
                'absences' => Absence::orderBy('created_at')->where('student_id', auth()->user()->id)->get()->groupBy('created_at')
            ]);
        }
    }
    

    在blade.php 之后由$absences 运行

    <tbody>
    @foreach ($absences as $date => $absence)
        <tr>
            <td class="align-middle pl-4 w-25">{{ $date }}</td>
            <td class="align-middle pl-4">
                @for ($i = 1; $i <= 8; $i++)
                    @if ($absence->contains($id))
                        <span class="badge badge-pill badge-danger my-second-badge">
                                                        {{ $i }}
                                                    </span>
                    @else
                        <span class="badge badge-pill badge-secondary my-second-badge">
                                                        {{ $i }}
                                                    </span>
                    @endif
                @endfor
            </td>
        </tr>
    @endforeach
    </tbody>
    

    【讨论】:

    • 现在我可以将它显示为单行,但我也不能使用 $absence->created_at。并且所有种子数据都显示在第一行,这也是最后一行。因此,如果您知道我的意思,昨天添加的缺勤会与今天添加的缺勤一起显示:D
    • 好的,你需要groupBy(created_at),之后,你需要使用@foreach
    • $absences = Absence::orderBy('created_at')-&gt;where('student_id', auth()-&gt;user()-&gt;id)-&gt;get()-&gt;groupBy('created_at');
    • 我没有回复,因为我试图实现它。我的查询与您在上一篇文章中写的相同,我不得不将 config/database.php 'strict' 更改为 false,但现在我收到错误“array_key_exists():第一个参数应该是字符串或整数”当我使用这个时:“$absences = Absence::orderBy('created_at')->where('student_id', auth()->user()->id)->get()-> groupBy('created_at');"
    • 而且当我在 get() 方法之前使用 groupBy('created_at') 时,该变量正在获取学生的所有结果,但未分组。
    猜你喜欢
    • 2011-05-08
    • 2017-10-07
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 2011-02-06
    • 1970-01-01
    相关资源
    最近更新 更多