2015-04-13 5 views
0

Я получаю сообщение об ошибкеLaravel Ошибка: Попытка получить свойство необъектных

Попытка получить свойство не-объекта (Вид: C: \ XAMPP \ HTDOCS \ Laravel \ проектируемый \ Resources \ вид \ mycases.blade.php)

Я определил отношения между двумя моделями Ccase и Hiring.

public function hirings() 
{ 
    return $this -> hasMany('App\Hiring', 'case_ID')->orderBy('id','desc'); 
} 

и постраничный результаты, используя метод ниже

public function getHiringsPaginateAttribute($perPage) 
{ 
    return $this->hirings()->paginate($perPage); 
} 

Другой модели «найм» имеет метод для определения отношения с Ccase следующим образом:

public function ccase() 
    { 

     return $this->belongsTo('App\Ccase', 'id'); 
    } 

В моем контроллере, У меня есть следующий код:

if(isset($search_term)) 
{ 
    $search_term = preg_replace('/\s+/', ' ', $search_term); 
    $search_term = trim($search_term); 
    if (strlen($search_term) > 0 && strlen(trim($search_term)) == 0) 
     $search_term = NULL; 

    $search_terms = explode(' ',$search_term); 

    $fields = array('id', 'title', 'case'); 

    $hirings = $hirings->whereHas('ccase', function($q) use ($search_terms, $fields){ 
      foreach ($search_terms as $term) 
      { 
       foreach ($fields as $field) 
       { 
        $q->orWhere($field, 'LIKE', '%'. $term .'%'); 
       } 

      } 
    }); 

} 

$hirings = $hirings->getHiringsPaginateAttribute($results_per_page); 

В mycases.blade.php, мой код

{{$hiring->ccase->id}} 

Эта линия метания сказанное ошибка при выходе {{$hiring->ccase}} является:

{"id":1,"case":"HI this is a sample case i am putting just for test.","created_at":"2015-02-22 11:54:09","updated_at":"2015-02-22 11:54:09"}

Что может быть не так с кодом?

+0

Возможно, вы находитесь в цикле, и хотя бы один из hirings не имеет назначенного ccase. – lukasgeiter

+0

Моя проблема была с 'public function ccase() { return $ this-> принадлежит ('App \ Ccase', 'id'); } 'и я должен быть как ' public function ccase() {return $ this-> attribTo ('App \ Ccase', 'case_ID', 'id'); } ' –

ответ

0

К сожалению, вы не можете использовать связанные модели во мнениях. Вот почему detailed explanation.

Ваш случай может быть решена путем указания имени соответствующего столбца на родительской таблице:

return $this->belongsTo('App\Ccase', 'ccaseId', 'id'); 

В модели найм, это будет как

public function ccase() 
{ 
    return $this->belongsTo('App\Ccase', 'case_ID', 'id'); 
} 

А теперь с точки зрения использования его например:

{{ $hiring->ccase->id }} 
+0

И почему? – lukasgeiter

+0

Спасибо @limonte ...Я решил ее путем изменения соотношения в Найм \t 'общественная функция ccase() \t { \t \t возвращение $ this-> belongsTo ('App \ Ccase', 'case_ID', 'идентификатор'); \t} ' Правильно ли это? –

+0

@ HassanSaqib почему бы и нет, еще лучше! Я поправлю свой ответ в соответствии с вашим комментарием –

0

Не уверен, но я думаю, что вы могли бы использовать отношения в поле зрения, вы должны использовать в контроллере, где вы quering за $ наймов в eager loading, просто добавьте:

with(['hirings.ccase']) 

могли бы вы предоставить мир кода от контроллера, где вы делаете запрос к Найм модель ясно?

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