laravel:关系方法必须返回 Illuminate\Database\Eloquent\Relations\Relation 类型的对象

Posted

技术标签:

【中文标题】laravel:关系方法必须返回 Illuminate\\Database\\Eloquent\\Relations\\Relation 类型的对象【英文标题】:laravel: Relationship method must return an object of type Illuminate\Database\Eloquent\Relations\Relationlaravel:关系方法必须返回 Illuminate\Database\Eloquent\Relations\Relation 类型的对象 【发布时间】:2014-07-09 12:31:30 【问题描述】:

我有 3 个数据库表,我没有在其中任何一个上建立任何关系。然后我写了以下代码:

public function store($key)

    $user_key = md5(Input::get('email') . "-" . strtotime('now'));

    $user = new User;

    $user->name = Input::get('name');
    $user->email = Input::get('email');
    $user->user_key = $user_key;
    $user->password = Hash::make(Input::get('password'));
    $user->apipass = md5(Input::get('password'));
    $user->save();

    $newUid = $user->id;

    //check key for share
    $invited = DB::table('invites')->where('invite_key', Input::get('invite_key'))->where('status', '0')->count();

    if($invited == 1) 
        $inviter_id = DB::table('invites')->where('invite_key', Input::get('invite_key'))->where('status', '0')->pluck('user_id');
        $read_only = DB::table('invites')->where('invite_key', Input::get('invite_key'))->where('status', '0')->pluck('read_only');

        $share = new RecordShare;

        $share->user_id = $inviter_id;
        $share->shared_with_id = $newUid;
        $share->read_only = $read_only;
        $share->save;

    

    return Redirect::to('login');

它应该创建一个新用户,然后查看谁邀请了他,然后与邀请者创建共享记录。

但是当我测试它时,我得到了错误:

逻辑异常

关系方法必须返回一个对象类型 照亮\数据库\雄辩\关系\关系

打开:/home/oneinfin/public_html/dialysis/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php

    */
protected function getRelationshipFromMethod($key, $camelKey)

$relations = $this->$camelKey();
if ( ! $relations instanceof Relation)

throw new LogicException('Relationship method must return an object of type '
. 'Illuminate\Database\Eloquent\Relations\Relation');

我认为我的数据有问题,因此尝试创建一个空记录

        $share = new RecordShare;
        $share->save;

但这也因同样的错误而失败。只有当我完全删除这部分时,该功能才会通过。

有什么问题吗?我试图清除缓存,但还是不行。

【问题讨论】:

【参考方案1】:

我想改变

$share->save;

$share->save();

【讨论】:

哦,伙计,这只是...看了这个答案,然后看了我的代码和即时脸手掌。谢谢!

以上是关于laravel:关系方法必须返回 Illuminate\Database\Eloquent\Relations\Relation 类型的对象的主要内容,如果未能解决你的问题,请参考以下文章

Laravel/Ardent - 在 save() 上,错误:关系方法必须返回 Illuminate 类型的对象

关系方法必须在 laravel eloquent 中返回一个对象

Laravel 模型必须返回一个关系实例

Laravel Eloquent ORM 无法正确返回模型的关系

在 Laravel 中覆盖关系

是否可以从 Laravel 中的 hasmany 关系中返回特定的索引元素?