[英]Syntax Error access violation in query Laravel 5.1
我在寻找和理解我的错误时遇到了麻烦。 我有表格付款,我想在学生页面上显示此数据(通过获取student_id)。 它应该通过student_id获取数据。
payments{id, student_id, course_id, transfer_amount, payment_type_id, is_paid, date}
但是这个错误不断出现。 我的错误在哪里,伙计们请帮忙。 这是StudentsController.php
public function payments($id, Request $request) {
$student = Student::findOrFail($id);
$payment = Payment::where('student_id', $id)-> get();
$student->has('payments')->where('student_id', $request->id)->get();
return view('students.groups', compact('student', 'payment'));
}
这是我的模型Student.php
public function payments()
{
return $this->belongsToMany('App\Payment','payments', 'student_id');
}
这是查看学生> payments.blade.php
@forelse ($student->payments as $key => $payment)
<tr class="center aligned">
<td>{{++$key}}</td>
<td>{{$payment->course_id}}</td>
<td>{{$payment->payment_type_id</td>
<td>{{$payment->transfer_amount}}</td>
<td>
@if($payment->is_paid)
<p style="color: green;">Paid</p>
@else <p style="color: red">Not Paid</p>
@endif
</td>
@empty
<tr class="center aligned">
<td colspan="12" class="ui red header">No data</td>
</tr>
@endforelse
错误显示的表/别名不唯一。
我认为您可以像这样更新查询:
public function payments($id, Request $request) {
$student = Student::findOrFail($id);
$payment = Student::with('payments')->where('id', $id)->get();
return view('students.groups', compact('student', 'payment'));
}
希望这对您有所帮助。
更新5/5/2017,我认为您应该更新payments.blade.php
@forelse ($student->payments as $key => $payment)
<tr class="center aligned">
<td>{{++$key}}</td>
<td>{{$payment->course_id}}</td>
<td>{{$payment->payment_type_id}}</td>
<td>{{$payment->transfer_amount}}</td>
<td>
@if($payment->is_paid)
<p style="color: green;">Paid</p>
@else <p style="color: red">Not Paid</p>
@endif
</td>
@empty
<tr class="center aligned">
<td colspan="12" class="ui red header">No data</td>
</tr>
@endforelse
您真的需要可变的$payment
吗? 您是否在视图中的任何地方或任何地方使用它? 如果没有,那么这可能是正确而雄辩的语法:
public function payments($id, Request $request) {
$student = Student::with('payments')->where('student_id', $id)->firstOrFail();
return view('students.groups', compact('student'));
}
在上面的示例中,它正在搜索ID为$id
的用户,并使用模型中定义的关系包括其payments
明细。
如果您需要验证学生必须始终至少支付一笔款项,则可以在语法中添加has('payments')
,如下所示:
public function payments($id, Request $request) {
$student = Student::has('payments')->with('payments')->where('student_id', $id)->firstOrFail();
return view('students.groups', compact('student'));
}
仅当学生在数据库中存储了至少1笔付款时,这才返回。
希望能帮助到你!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.