1. ホーム
  2. php

[解決済み] laravel: Relationship method must return object of type IlluminateDatabaseEloquentRelations

2022-02-01 12:54:42

質問

私は3つのDBテーブルを持っていますが、それらのいずれにもリレーションシップを付けていません。

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');
}

新しいユーザーを作成し、誰が彼を招待したかを確認し、招待者との共有レコードを作成することになっています。

が、テストするとエラーになる。

LogicException

Relationship メソッドは、以下の型のオブジェクトを返す必要があります。 IlluminateDatabaseEloquentRelationsRelation

を開いてください。/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;

が、これも同じエラーで失敗しています。この部分を完全に削除すると、この関数はパスするようになります。

何が問題なのでしょうか?キャッシュをクリアしてみましたが、まだうまくいきません。

どうすればいいですか?

変更する

$share->save;

になります。

$share->save();