2015-07-03 4 views
-2

Во-первых, он отлично работает. Но я не знаю, как это сделать на этой странице, но эта проблема может быть решена, когда я изменил код в поле зрения {{$ training- > first() -> sectionsCount}}, но моя спецификация неверна. Моя полная ошибка: -Попытка получить свойство не-объекта в Laravel 5.1

ErrorException in Training.php line 51: Trying to get property of non-object (View:resources/views/Training/index.blade.php) 

Мой код в модели: -

public function sectionsCountRelation() 
{ 
return $this->hasOne('App\Schedule')->selectRaw('training_id, count(*) as count')->groupBy('training_id')->where('training_end_date','<',carbon::now()); 

}

public function getSectionsCountAttribute() 
{ 
return $this->sectionsCountRelation->count;<!--This is line 51 --> 
} 

В контроллере

public function index() 
{ 

    $training = Training::with('sectionsCountRelation')->get(); 

    return view('Training.index',compact('training')); 
} 

В Вид: - @foreach ($ training as $ training)

 <tr> 

     <td>{{$i}}</td> 
     <td>{{ $training->category }}</td> 
     <td>{{ $training->topic }}</td> 
     <td><a href="/schedule/before_held/{{$training->id}}">{{$training->sectionsCount}}</a></td> 
     <td><a href="{{route('training.edit',$training->id)}}" class="btn btn-info">Update</a></td> 
     <td><a href="/schedule/create/{{$training->id}}" class="btn btn-info">Schedule</a></td> 
     <td> 
     {!! Form::open(['method' => 'DELETE', 'route'=>['training.destroy', $training->id]]) !!} 
     {!! Form::submit('Delete', ['class' => 'btn btn-danger']) !!} 
     <?php $i++;?> 
     {!! Form::close() !!} 
     </td> 
    </tr> 

@endforeach 
+0

Непонятно, что вы действительно просите. Но вы уже дали ответ «{{$ training-> first() -> sectionsCount}}' делает это. И проблема в том, что '$ training = Training :: with ('sectionsCountRelation') -> get();' возвращает коллекцию (более одного объекта), а не объект. Таким образом, вы либо выбираете один объект из этой коллекции (который выполняет 'first()'), либо прокручиваете эту коллекцию (с помощью 'for .. each'), чтобы показать их все. –

ответ

0

Похоже, у вас есть тренинги, у которых нет назначенного графика. Это означает, что $this->sectionsCountRelation возвращает null, и вы не можете получить доступ к нему ->count. Попробуйте проверить на null:

public function getSectionsCountAttribute() 
{ 
    return $this->sectionsCountRelation === null ? 0 : $this->sectionsCountRelation->count; 
} 
Смежные вопросы