【问题标题】:Laravel: LogicException in Model.php line 2673: Relationship method must return an object of type Illuminate\Database\Eloquent\Relations\RelationLaravel:Model.php 第 2673 行中的 LogicException:关系方法必须返回 Illuminate\Database\Eloquent\Relations\Relation 类型的对象
【发布时间】:2018-02-07 14:11:02
【问题描述】:

我有一个包含 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

【问题讨论】:

    标签: php laravel


    【解决方案1】:

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

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

    【讨论】:

    • 没错。我实际上是在使用视频来学习一些东西,并且代码在视频上完美运行,但我不知道为什么它会给我这个错误。我做的一切都是正确的。我一遍又一遍地观看视频以确保一切正确。
    猜你喜欢
    • 2018-04-24
    • 2014-06-26
    • 2018-03-20
    • 2014-07-09
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多