0

您好,我已经安装了 sentry2 包,并且我创建了一个通过用户名获取用户的功能,即使我有喜欢用于登录电子邮件的主列,但它给我一个错误。

所以我创建了我的模型用户并扩展它\Cartalyst\Sentry\Users\Eloquent\User

然后我在这种情况下与另一个模型建立关系Player

所以关系看起来像这样:

用户模型

class User extends \Cartalyst\Sentry\Users\Eloquent\User implements UserInterface, RemindableInterface {

    public function sport() {

        return $this->hasOne('Core\Team\Player\Models\Player','player_id');
    }

}

播放器模型

public function user() {
        return $this->belongsTo('User','player_id');
    }

然后这是通过用户名查找用户的功能给我一个错误:

调用未定义的方法 Illuminate\Database\Query\Builder::sport()

通过用户名获取用户的功能

public function byUsername($username) {

        $emptyModelInstance = $this->sentry->getUserProvider()->getEmptyUser();
        $myUser = $emptyModelInstance->with('sport')->where('username', '=', $username)->first();

        if ( is_null($myUser) ) {

            return false;

        } else {

            return $myUser;
        }

    }

Ps:如果我删除 with() 方法它工作得很好

4

1 回答 1

0

老实说,我真的不清楚你想在这里实现什么,而且我从来没有使用过哨兵包,所以这有点像在黑暗中刺伤,但是......

当你说“如果我删除了 with() 方法,它工作得很好”,如果你删除了 with(),你可以访问运动模型。

例如

$myUser = $emptyModelInstance->where('username', '=', $username)->first();
dd($myUser->sport);

以上是否会淘汰您的运动对象?

如果不是,那么我怀疑发生的事情是 Sentry 正在使用自己的用户模型,而不是您定义的用户模型,因此 sport() 方法不可用。您可以通过 dd'ing 用户并查看它是哪个类的实例来确认这一点。

如果是这种情况,一个快速的谷歌搜索表明你所要做的就是发布包的配置并在那里设置你的自定义用户模型。

http://forumsarchive.laravel.io/viewtopic.php?id=11048

如果失败,请尝试将您的用户对象转储到问题中,这可能有助于弄清楚发生了什么。

于 2014-03-10T21:29:51.373 回答