从Collection中获取模型

时间:2015-10-27 05:35:15

标签: php oop laravel

非常基本但我很难解决这个问题。

我在数据库中有一个显示为在线用户的用户列表。我通过user_id

获取这些用户

模型

public function scopeloggedInUser($query){
        return $query->select('user_id')->get();
}

当我var_dumpdd时,它会显示其当前登录用户列表的集合。 (说它超级简单)。

enter image description here

我需要获取这些个人用户。如何在在线模型中将其稀释为单个用户。

在Controller中

public function index(Online $online)
        {
            $activeuser = $online->loggedInUser();
            return view('user.user', compact('activeuser'));
        }

1 个答案:

答案 0 :(得分:0)

在您的在线模型中指定与真实用户的关系,如下所示:

public function user()
{
    return $this->hasOne('App\User');
}

在您的视图中,您现在可以像这样访问foreach循环中的每个用户:

foreach ($activeusers as $user)
{
    echo $user->user->username; // or whatever fields you need
}

但说实话:在您的情况下,如果您需要此功能,我将不会设置新的数据库表和新模型。

将您的逻辑移动到您的用户模型并将一个布尔字段添加到您的用户表并将您的查询范围更改为此(再次:在您的用户模型中)

public function scopeOnline($query){
    return $query->where('online', 1);
}

您也不应该在范围内执行get(),因为您无法再访问查询构建器。例如:您希望所有登录的用户都是女性。 得到:不漂亮。

没有得到:

User::online()->where('gender', '=', 'female')->get();