错误:关系方法必须返回类型为Illuminate \ Database \ Eloquent \ Relations \ Relation

时间:2017-07-16 21:36:23

标签: php laravel laravel-4 eloquent

我正在尝试返回属于同一案例的多个会话

路由文件routes.php:

Route::get('company/case/{case_id}/session/', ['before' => 'auth|can:view_all_sessions*view_own_sessions', 'uses' => 'SessionController@index', 'as' => 'company.session.index']);

Controller :: SessionController.php:

    public function index($case_id) {
    $case = LawCase::findOrFail($case_id);

    $sessions = $case->sessions()->orderBy(Input::get('field', 'date'), Input::get('sort', 'desc'))
        ->paginate(20);

    $data = [
        'sessions' => $sessions,
        'form' => null,
        'title' => trans('links.sessions'),
        'case' => $case,
        'case_id' => $case_id
    ];

    $this->layout->section = View::make('session.index', $data);
}

模型类:: LawSession.php:

    public function lawcase() {
    return $this->belongsTo(LawCase::class, 'case_id');
}

模型类:: LawCase.php:

public function sessions() {
    return $this->hasMany(LawSession::class, 'case_id');
}

我得到了这个错误:

  

关系方法必须返回一个类型为Illuminate \ Database \ Eloquent \ Relations \ Relation

的对象

2 个答案:

答案 0 :(得分:1)

这应该有所帮助:

dd($case->getRelations());

你看到你的关系吗?如果是,请执行:

dd($case->sessions);

是否返回相关数据?

如果这没有帮助找到问题,请分享完整的堆栈跟踪。没有日志就很难猜出解决方案。

您可以在以下位置找到日志:

/storage/logs/laravel.php

答案 1 :(得分:-1)

只需在SessionController.php中修改此行

即可

$sessions = $case->sessions->orderBy(Input::get('field', 'date'), Input::get('sort', 'desc'))->paginate(20);

并使数据库中存在关系记录。