1

晚上好,我正在和 Laravel 玩一点,我遇到了这种情况。我有 2 个模型和 3 个表格来显示患者的生命体征。

Table pacient:
id
names
birthdate

Table vital_sign:
id
description
unit

table pacient_vital_sign
id
pacient_id
vital_sign_id
first_value
second_value
date_time_taken

和2个模型:

class Pacient extends Eloquent{
        public static $timestamps = false;
        
        public function vital_signs(){
          return $this->has_many_and_belongs_to('VitalSign', 'pacient_vital_sign', 'pacient_id', 'vital_sign_id');
        }
    }

class VitalSign extends Eloquent{
        public static $timestamps = false;
        public static $table = 'vital_signs';
        public function pacients(){
          return $this->has_many_and_belongs_to('Pacient', 'pacient_vital_sign', 'vital_sign_id', 'pacient_id');
        }
    }

对于我的观点,我正在发送我想要显示其生命体征的患者:

$pacient = Pacient::where('active', '=', 1)->first();

因此,根据文档,我可以这样做来显示关键表数据:

@foreach($pacient->vital_signs as $sv)
    <tr>
        <td>{{ $sv->pivot->date_time_taken }}</td>
        <td>{{ $sv->description }}</td>
        <td>{{ $sv->pivot->first_value }} &nbsp; {{ $sv->pivot->second_value }}</td>
    </tr>
    @endforeach

但是这样,既不显示 date_time_taken 值,也不显示 first_value 或 second_value。显示说明。

现在,如果我做这样的事情

@foreach($pacient->vital_signs()->pivot()->get() as $sv)
    <tr>
        <td>{{ $sv->date_time_taken }}</td>
        <td>{{ $sv->description }}</td>
        <td>{{ $sv->first_value }} &nbsp; {{ $sv->second_value }}</td>
    </tr>
    @endforeach

显示 date_time_taken、first_value 和 secon_value 但我不知道如何反转关系以显示相关表列的值,在这种情况下,来自 vital_sign 表的描述

所以我在这两种情况下,我都错过了一些东西。有任何想法吗?我缺少什么?

谢谢

4

2 回答 2

2

I found this to be useful, but a quick addendum for Laravel 4:

return $this->belongsToMany('Model','pivot_table','this_id','foreign_id')->withPivot('col1','col2');
于 2014-05-28T21:58:37.873 回答
2

在文档上:

默认情况下,只会返回数据透视表中的某些字段(两个 id 字段和时间戳)。如果您的数据透视表包含其他列,您也可以使用 with() 方法获取它们

所以就我而言,在这两种模型上:

return $this->has_many_and_belongs_to('VitalSign', 'pacient_vital_sign', 'pacient_id', 'vital_sign_id')->with('col1', 'col2', 'coln');

这将起作用:

@foreach($pacient->vital_signs as $sv)
    <tr>
        <td>{{ $sv->pivot->date_time_taken }}</td>
        <td>{{ $sv->description }}</td>
        <td>{{ $sv->pivot->first_value }} &nbsp; {{ $sv->pivot->second_value }}</td>
    </tr>
@endforeach
于 2013-05-15T15:28:08.297 回答