2016-11-30 2 views
1

В моей базе данных у меня есть много-много отношений между таблицами уведомлений и статусов. Таким образом, сводная таблица хранит значения notification_id, statuses_id и значения. Теперь, в моей модели я написал функцию historysStatus, которая извлекает значения, что и created_at из сводной таблицыизвлечь все записи в сводной таблице

public function historystatus() 
{ 
    $o_status = Status::where('name','health')->first(); 
    $o_response = $this->statuses()->where('status_id', $o_status->id) 
    ->select('values','created_at')->first(); 

     if($o_response === null){ 
      return false; 
     } 


    return ['value' => $o_response->values, 
      'timestamp' => $o_response->created_at]; 
} 

Я хочу, чтобы перебрать все значения и временные метки, связанные с конкретным notification.thus в лезвии я написал для каждый цикл для итерации всех значений и создания в.

@foreach($notes as $notification) 
    <?php $notificationHealth = $notes->historystatus('health'); ?> 
    <tr> 
     <td>{{ $notificationHealth['timestamp'] }}</td>       
     <td> {{ $notificationHealth['value'] }}</td>. 
    </tr>  
@endforeach 
</tbody> 

вместо этого он дал мне только последнюю запись в 4 раза. Что-то не так с запросом sql? Буду признателен за любые предложения и идеи?

+0

использовать $ notificationHealth = $ notification-> historystatus ('health'); вместо $ notificationHealth = $ notes-> historystatus («здоровье»); –

+0

ошибка типографии даже с этим изменением не выполняет работу –

+0

Почему это помечено CakePHP? Код выглядит как Laravel ... – burzum

ответ

0

Внутри foreach попробуйте использовать $notification->historystatus('health'); вместо $notes->historystatus('health');

@foreach($notes as $notification) 
    <?php $notificationHealth = $notification->historystatus('health'); ?> 
    <tr> 
     <td>{{ $notificationHealth['timestamp'] }}</td>       
     <td> {{ $notificationHealth['value'] }}</td>. 
    </tr>  
@endforeach 
0
public function history($s_type) 
    { 
     if (!in_array($s_type, ['speed', 'health'])){ 
      return false; 
     } 

     $o_status = Status::where('name', strval($s_type))->first(); 
     $o_response = $this->statuses()->where('status_id', $o_status->id) 
     ->select('values', 'created_at')->orderBy('created_at','DESC')->get(); 

     if($o_response === null || $o_response->count() === 0){ 
      return false; 
     } 

     $a_ret = []; 

     foreach ($o_response as $o_status) { 
      $a_ret[] = [ 
       'value' => $o_status->values, 
       'timestamp' => $o_status->created_at 
      ]; 
     } 

     return $a_ret; 

    } 

это простой ответ я разобрался. и петлю foreach в стороне лезвия.

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