从刀片中的Controller到Laravel多对多关系访问值

问题描述 投票:1回答:3

我有两个数据库表 耐心的 - ID - 名称 报告 - ID - 描述 和枢轴塔 patient_report - ID --report_id --patient_id

我的病人模型

class Patient extends Model
{ 
    public function reports()
    {
        return $this->belongsToMany('App\Report' , 'patient_reports');
    }
}

我的报告模型

class Report extends Model
{
    public function patients()
    {
        return $this->belongsToMany('App\Patient' , 'patient_reports');
    }
}

我的ReportControlller

public function viewList($reportFloor = null)
{
    $report = Report::orderBy('created_at' , 'desc')->paginate(50);
    return view('admin.report_list' , ['reports' => $report]);
}

数据库:患者表有report_id列,报告表有patient_id列 N.B:我想找一个有报告的患者姓名。我正在使用像这样的laravel动态属性--- 最后我的刀片

@foreach ($reports as $report)
    {{ $report->patients->name }}
@endforeach

但它提供了这样的错误 error like as

php mysql laravel
3个回答
2
投票

试试这个:

@foreach ($reports->patients as $patient)
    {{ $patient->name }}
@endforeach

0
投票

正如错误所暗示的那样,您正在尝试访问集合上的name属性。要修复你应该改变:

@foreach ($reports as $report)
    {{ $report->patients->name }}
@endforeach

至:

@foreach ($reports as $report)
    @foreach ($report->patients as $patient)
        {{ $patient->name }}
    @endforeach
@endforeach

0
投票

在你的控制器中,我会首先找到患者,然后获得他们的报告。

$patients = Patient::with('reports')->get();

然后在视图中我会这样做:

//This will first get all the patients
@foreach ($patients as $patient)

    // This will get each of patients relational reports
    @foreach ($patient->reports as $report)
        {{ $report->name }}
    @endforeach

@endforeach    

推荐问答