【问题标题】:Sentry 2 Relations with laravel哨兵2与laravel的关系
【发布时间】:2014-03-10 17:37:55
【问题描述】:

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

所以我创建了我的模型 User 并使用 \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 来让你重回盈利。 @downvoter - 您可能需要一些时间来解释您的反对意见,以便更具建设性

标签: laravel laravel-4 cartalyst-sentry


【解决方案1】:

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

当你说“如果我删除 with() 方法效果很好”时,如果你删除了 with(),你是否可以访问运动模型。

例如

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 2014-01-21
    • 2014-06-11
    • 2014-02-24
    • 1970-01-01
    相关资源
    最近更新 更多