首页 > 解决方案 > Laravel Blade - 显示短路关系

问题描述

在我正在构建的学术应用程序中,我为学生提供了申请他们想参加的课程的能力。现在,一旦发送表格,就会向管理员发送一封电子邮件,其中将显示一个简短的表格,其中包括申请的相关学校、课程和最后的课程。

每个学校都有很多课程,每个课程都有很多课程。每个课程属于一个课程,每个课程属于一个学校。申请人可以申请许多课程,并且一个课程可以是许多应用程序的一部分(Application_Course pivot)。

Schools    Programs      Courses        Applicants     Applicant_Course
id         id            id             id             applicant_id
title      school_id     program_id     fname          course_id
           title         title          lname

学校.php

public function programs()
{
    return $this->hasMany(Program::class);
}

public function courses()
{
    return $this->hasManyThrough(Course::class, Program::class);
}

程序.php

public function school()
{
    return $this->belongsTo('App\Models\School', 'school_id', 'id');
}

public function courses()
{
    return $this->hasMany(Course::class);
}

课程.php

public function program()
{
    return $this->belongsTo('App\Models\Program', 'program_id', 'id');
}

申请人.php

public function courses()
{
    return $this->belongsToMany(Course::class)->withTimestamps();
}

应用程序控制器.php

    public function store($applicant_type, Request $request)
    {
        $schools = School::orderBy('created_at', 'asc')->get();
        $programs = Program::orderBy('created_at', 'asc')->get();
    
        $input = $request->all(); 
        Applicant::create($input);
        $applicant = Applicant::where('fname', $input['fname'] ) 
                                ->where('lname', $input['lname'] )
                                ->where('email', $input['email'] )
                                ->latest()->first();
        $checkboxes = $request->get('course-check');
        $applicant->courses()->attach($checkboxes);
                        
        \Mail::send('applicationMail', array(
                
        'fname' => $input['fname'],
        'lname' => $input['lname'],                            
        'course-check' => $input['course-check'],                            
        'applicant' => $applicant,                            
        'schools' => $schools,
        'programs' => $programs,
    
        ), function($message) use ($request){
                
            $message->from(env('MAIL_USERNAME'));
            $message->to(env('MAIL_USERNAME'))->subject('Course Application - '. 
            $request->get('lname').' '.$request->get('fname')); 
                
             });
                
             return redirect()->back()->with(['success' => 'Your application has been sent']);        
         }                              
}

期望的最终结果如下所示:

School_1
---Program_1
------Course_1
------Course_2
------Course_3
---Program_2
------Course_4

School_2
---Program_3
------Course_5
---Program_4
------Course_6
------Course_7

到目前为止,我已经尝试了刀片foreach循环和if语句的多种组合,但没有达到预期的结果。

第一次尝试:

            @foreach ($applicant->courses as $course)
                <tr class="course-title-row">
                    <td class="left-column"><b>Title: </b></td>
                    <td class="right-column">{{ $course->title }}</td>
                </tr>
            @endforeach

这个 ^ 只是一一返回应用程序的课程标题,如下所示:

Title: Course_Title_1
Title: Course_Title_2
Title: Course_Title_3
Title: Course_Title_4
etc.

第二次尝试:

                @foreach ($applicant->courses as $course)
                    @foreach($schools as $school)
                        @if($course->program->school->id == $school->id)
                            <p>{{ $school->title }}</p>
                            @foreach ($programs as $program)
                                @if ($course->program->id == $program->id)
                                    <p>{{ $school->title}}</p>
                                    <tr class="course-title-row">
                                        <td class="left-column"><b>Program Title: </b></td>
                                        <td class="right-column">{{$course->title}}</td>
                                    </tr>    
                                @endif
                            @endforeach
                        @endif
                    @endforeach
                @endforeach

提交包含属于 school_1 的 program_1 的 course_1 和 course_2 以及属于 school_2 的 program_2 的 course_3 和 course_4 的表单后,我得到以下格式的结果:

School_1 Title
School_1 Title
Program Title: Program_1 Title

School_1 Title
School_1 Title
Program Title: Program_2 Title

School_2 Title
School_2 Title
Program Title: Program_3 Title

School_2 Title
School_2 Title
Program Title: Program_4 Title

我知道这是一个很大的帖子,但有人可以帮我得到想要的结果吗?非常感谢读到这里的任何人!

标签: phplaravelloopslaravel-blade

解决方案


推荐阅读