繁体   English   中英

语法查询Laravel 5.1中的错误访问冲突

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM