获取数据透视表和相关表列值Laravel 3

时间:2013-05-09 03:16:22

标签: php laravel laravel-3

晚上好好偷看,我和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 }} &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表的描述

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

由于

2 个答案:

答案 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 }} &nbsp; {{ $sv->pivot->second_value }}</td>
    </tr>
@endforeach

答案 1 :(得分:2)

我发现这很有用,但是Laravel 4的快速附录:

return $this->belongsToMany('Model','pivot_table','this_id','foreign_id')->withPivot('col1','col2');