我在获取自定义创建方法的价值方面遇到了问题。我想要的是获取变量$ student_id并将其放在我的findOrFail()中,如下所示:
ReservationController.php
public function index()
{
$student = Student::with(['sectionSubjects','sectionSubjects.section',
'sectionSubjects.subject'])->findOrFail(1); //$student_id
return $student->sectionSubjects;
}
public function create($id)
{
$student_id = $id;
$subjects = Subject::with('sections')->get();
return view('reservation.form',compact('subjects','student_id'));
}
这是我的路线:
Route::resource('student', 'StudentController');
Route::resource('reservation', 'ReservationController', ['except' => ['create','show'] ]);
Route::get('reservation/{id}/create',
['as' => 'reservation.create', 'uses' => 'ReservationController@create'
]);
我有这个form.blade.php,当用户点击学生时,它将被重定向到ReservationController中的自定义创建方法,如下所示:
<div class="list-group ">
@inject('student', 'App\Http\Controllers\StudentController')
@foreach($student->index() as $s)
<div class="list-group-item">
<h4 class="list-group-item-heading">
{{ $s->first_name }} {{ $s->middle_name }} {{ $s->last_name }}</i>
</h4>
<h5>
ID No.: {{ $s->id_no }}</i>
</h5>
<a href="{{ route('student.edit', $s->id) }}" class="btn btn-xs btn-primary">Edit Info</a>
<a href="{{ route('reservation.create', $s->id ) }}"
class="btn btn-xs btn-danger">
Enroll
</a>
</div>
@endforeach
</div>
现在在ReservationController的index方法中,我想只获取与该$ student_id相关的值。但是,我无法想象实现这一目标。任何人都可以建议解决这个问题的方法吗?
答案 0 :(得分:1)
实际上,您不会遇到任何问题Logic
问题。
Controller
未按正确方式设计。
你需要有这样的东西
//List all subjects
public function index() {
return view('reservation.form')->with('subjects', Subject::with('sections')->get());
}
//List a single subject
//If i didn't misunderstood you, you can remove this one according to the source code you're using.
public function show($id) {
return view('reservation.oneSubject')->with('subject', Subject::find($id));
}
//Enroll a student to subject
public function enroll($id, $student_id) {
//Find the section for $id
//Add student_id to that section
}
您需要在此示例中定义一条额外的路线GET
或POST
,我可以使用GET
Route::get('/reservation/{id}/enroll/{student_id}', 'ReservationsController@enroll');
我应遵循什么逻辑?
index()
)show($id)
)enroll($id, $student_id)
如何传递$ id,$ student_id才能注册?
您的预订资源将包含这些路线。
/reservations
/reservations/{id}/store
etc..
示例中的 id
参数,指向Subject
而不是学生。
让我们说你有一个show($id)
功能,它会显示单个主题和学生列表,
return view(...)->with('subject', Subject::find($id)->with('students', YOUR_STUDENTS);
在视图中,假设您已经$students
@foreach($students as $student)
<a href="{{ action('ReservationController@enroll', [$subject->id, $student->id']) }}">Enroll student</a>
@endforeach
我没有show()功能!
由于您没有显示单个subject
的show函数,因此此处将应用相同的逻辑,
anchor tags
所以你会有这样的事情,
@foreach($subjects as $subject)
<h1>{{ $subject->title }}</h1>
@foreach($students as $student)
<div class="students">
<h2> {{ $student->name }}</h2>
<a href="{{ action('ReservationController@enroll', [$subject->id, $student->id]) }}">Enroll</a>
</div>
@endforeach
@endforeach