晚上好好偷看,我和Laravel玩了一点,我有这种情况。我有2个模型和3个表来显示来自pacient的生命体征。
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 = Pacient::where('active', '=', 1)->first();
所以,根据documentation,我可以这样做来显示关键的表数据:
@foreach($pacient->vital_signs as $sv)
<tr>
<td>{{ $sv->pivot->date_time_taken }}</td>
<td>{{ $sv->description }}</td>
<td>{{ $sv->pivot->first_value }} {{ $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 }} {{ $sv->second_value }}</td>
</tr>
@endforeach
显示date_time_taken,first_value和secon_value,但我不知道如何反转关系以显示相关表列的值,在本例中,来自vital_sign表的描述
所以在这两种情况下,我都错过了一些东西。有任何想法吗?我错过了什么?
由于
答案 0 :(得分: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 }} {{ $sv->pivot->second_value }}</td>
</tr>
@endforeach
答案 1 :(得分:2)
我发现这很有用,但是Laravel 4的快速附录:
return $this->belongsToMany('Model','pivot_table','this_id','foreign_id')->withPivot('col1','col2');