2013-05-09 4 views
1

Добрый вечер, я немного играю с Laravel, и у меня такая ситуация. У меня есть 2 модели и 3 таблицы для отображения жизненно важных признаков от пациента.Получение значений столбцов столбцов и вертированных таблиц Laravel 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 = 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

Так что в обоих случаях я чего-то не хватает. Есть идеи? Что я пропущу?

Благодаря

+0

В вашем первом '@ foreach' как насчет использования' $ sv-> pivot() -> first_value'? –

+0

Пробовал и выбрасывал эту ошибку: Метод [pivot] не определен в классе Query – Cheluis

+0

Ах да, я думаю, это имеет смысл. Я могу вам точно сказать, что второй пример не будет содержать описание, потому что он не существует на своде. Почему ваш первый пример не работает? Я, к сожалению, не уверен. –

ответ

2

На Docs:

By default only certain fields from the pivot table will be returned (the two id fields, and the timestamps). If your pivot table contains additional columns, you can fetch them too by using the with() method

Так что в моем случае, на обеих моделях:

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 
2

Я нашел это полезно, но быстрое добавление для Laravel 4:

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

API Laravel изменился, и теперь это правильный ответ. –

Смежные вопросы