Laravel错误:试图获取非对象的属性

时间:2015-04-13 08:22:36

标签: laravel eloquent laravel-5

我收到错误

尝试获取非对象的属性(查看:C:\ xampp \ htdocs \ laravel \ proj \ resources \ views \ 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);
}

另一个模型'Hiring'有一个方法来定义与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”:“这是我正在进行测试的示例案例。”,“created_at”:“2015-02-22 11:54:09”,“updated_at” :“2015-02-22 11:54:09”}

代码有什么问题?

2 个答案:

答案 0 :(得分:0)

很遗憾,您无法在视图中使用相关模型。这是detailed explanation为什么。

您的案例可以通过在父表上指定关联列的名称来解决:

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

在模特招聘中,它就像

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

现在可以使用它:

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

答案 1 :(得分:0)

不确定,但我认为您可以在视图中使用关系,您应该在控制器中使用eager loading来查询$ hirings,只需添加:

with(['hirings.ccase'])

请您提供控制器的代码,您可以查询招聘模式以获取明确的信息吗?