哨兵2与laravel的关系

时间:2014-03-10 17:37:56

标签: laravel laravel-4 cartalyst-sentry

您好我安装了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()方法,它可以正常工作

1 个答案:

答案 0 :(得分:0)

我必须说实话,我真的不清楚你想要在这里实现什么,而且我从来没有使用过哨兵套装,所以这在黑暗中有点刺,但是......

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

e.g。

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

以上是否会丢弃您的运动物体?

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

如果是这种情况,快速谷歌搜索建议您只需发布包的配置并在其中设置自定义用户模型。

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

如果没有尝试将这个用户对象的转储添加到问题中,可能有助于解决最新进展。