Laravel Error: Trying to get property of non-object
Laravel Error: Trying to get property of non-object
我遇到错误
正在尝试获取非对象的 属性(视图: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":"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"}
代码可能有什么问题?
很遗憾,您不能在视图中使用相关模型。这就是 原因。
您的情况可以通过指定父级关联列的名称来解决 table:
return $this->belongsTo('App\Ccase', 'ccaseId', 'id');
在模型招聘中,它会像
public function ccase()
{
return $this->belongsTo('App\Ccase', 'case_ID', 'id');
}
现在在视图中这样使用它:
{{ $hiring->ccase->id }}
不确定,但我认为您可以在视图中使用关系,您应该在查询 $hirings 的控制器中使用 eager loading,只需添加一个:
with(['hirings.ccase'])
能否请您提供来自控制器的和平代码,您在其中查询招聘模型以明确?
我遇到错误
正在尝试获取非对象的 属性(视图: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":"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"}
代码可能有什么问题?
很遗憾,您不能在视图中使用相关模型。这就是
您的情况可以通过指定父级关联列的名称来解决 table:
return $this->belongsTo('App\Ccase', 'ccaseId', 'id');
在模型招聘中,它会像
public function ccase()
{
return $this->belongsTo('App\Ccase', 'case_ID', 'id');
}
现在在视图中这样使用它:
{{ $hiring->ccase->id }}
不确定,但我认为您可以在视图中使用关系,您应该在查询 $hirings 的控制器中使用 eager loading,只需添加一个:
with(['hirings.ccase'])
能否请您提供来自控制器的和平代码,您在其中查询招聘模型以明确?