Laravel:Model.php第2673行中的LogicException:关系方法必须返回一个类型为Illuminate \ Database \ Eloquent \ Relations \ Relation的对象

时间:2018-02-06 20:17:30

标签: php laravel

我有一个包含3个表的数据库:userstatusesfriends。 我的状态表有一个关系列“父ID”,它是NULL但存储了回复状态的用户的user_id。以下是我的 Status.php 代码:

namespace Pictogram\Models;

use Illuminate\Database\Eloquent\Model;

class Status extends Model
{
    protected $table = 'statuses';

    protected $fillable = [
        'body'
    ];

    public function user()
    {
        return $this->belongsTo('Pictogram\Models\User', 'user_id');
    }

    public function scopeNotReply($query)
    {
        return $query->whereNull('parent_id');
    }

    public function replies()
    {
        return $this->hasMany('Pictogram\Models\Status', 'parent_id');
    }
}

并且来自我的路线文件:这控制回复状态

Route::post('/status', [
    'uses' => '\Pictogram\Http\Controllers\StatusController@postStatus',
    'as' => 'status.post',
    'middleware' => ['auth'],
]);

Route::post('/status/{statusId}/reply', [
    'uses' => '\Pictogram\Http\Controllers\StatusController@postReply',
    'as' => 'status.reply',
    'middleware' => ['auth'],
]);

我的状态控制器.php

class StatusController extends Controller 
{
    public function postStatus(Request $request)
    {
        $this->validate($request, [
            'status' => 'required',
        ]);

        Auth::user()->statuses()->create([
            'body' => $request->input('status'),
        ]);

        return redirect()
            ->route('home')
            ->with('info', 'Status updated.');
    }

    public function postReply(Request $request, $statusId)
    {
        $this->validate($request, [
            "reply-{$statusId}" => 'required',
        ], [
            'required' => 'The reply body is required.'
        ]);

        $status = Status::notReply()->find($statusId);

        if (!$status) {
            return redirect()->route('home');
        }

        if (!Auth::user()->isFriendsWith($status->user) && Auth::user()->id !== $status->user->id)
        {
            return redirect()->route('home');
        }

        $reply = Status::create([
            'body' => $request->input("reply-{$statusId}"),
        ])->user()->associate(Auth::user());

        $status->replies()->save($reply);

        return redirect()->back();

    }

}

最后,这是下面的模型.php的第2673行:

protected function getRelationshipFromMethod($method)
{
    $relations = $this->$method();

    if (! $relations instanceof Relation) {
        throw new LogicException('Relationship method must return an object of type '
        .'Illuminate\Database\Eloquent\Relations\Relation');
    }

    return $this->relations[$method] = $relations->getResults();
}

我使用的是Laravel 5.2。现在我的问题是回复被保存到表中,因为空parent_id然后获取回复的用户的user_id,但随后它会显示一个错误页面,其中包含以下错误。 Error1/2

Error2/2

1 个答案:

答案 0 :(得分:1)

确保您的关系名称在状态模型中正确。 检查状态模型中的回复()实现。 它返回状态关系我应该是回复的实际,即回复

public function replies()
{
    return $this->hasMany('Pictogram\Models\Reply', 'parent_id');
}