Php Laravel-根据用户进行查询

Php Laravel-根据用户进行查询,php,laravel,Php,Laravel,在Laravel中,我有一个场景,在这个场景中,不同的用户可以进入一个视图刀片,在那里他们可以看到他们创建的帖子 目前我只是传入所有数据,但我想知道如何根据用户将数据传递到视图 例如,如果我是root用户,我可以看到所有类似的内容 Post::get() 然后 这将返回岗位 基本上我所尝试的是这样的 if(user->role = their role) then you get query 1 else you get query 2 您认为使用条件查询作用域可以实现这一点吗 更新

在Laravel中,我有一个场景,在这个场景中,不同的用户可以进入一个视图刀片,在那里他们可以看到他们创建的帖子

目前我只是传入所有数据,但我想知道如何根据用户将数据传递到视图

例如,如果我是root用户,我可以看到所有类似的内容

Post::get()
然后

这将返回岗位

基本上我所尝试的是这样的

if(user->role = their role) then you get query 1 else you get query 2
您认为使用条件查询作用域可以实现这一点吗

更新

这是一个可怕的解决方案吗

if($user->department == "Loans")
{
    echo "you are from loans FAM";
    $articles = Article::where('department', '=', 'Loans')->get();
} 
else if($user->department == "Digital")
{
    echo "you are from digital FAM";
    $articles = Article::where('department', '=', 'Digital')->get();
} 
else if($user->department == "Consulting")
{
    echo "you are from Consulting FAM";
    $articles = Article::where('department', '=', 'Consulting')->get();
} 

如果愿意,您可以通过查询范围来实现这一点。大概是这样的:

class Post extends Model
{
    // ...

    public function scopeByUser($query, User $user)
    {
        // If the user is not an admin, show only posts they've created
        if (!$user->hasRole('admin')) {
            return $query->where('created_by', $user->id);
        }

        return $query;
    }
}
$posts = Post::byUser($user)->get();
然后你可以这样使用它:

class Post extends Model
{
    // ...

    public function scopeByUser($query, User $user)
    {
        // If the user is not an admin, show only posts they've created
        if (!$user->hasRole('admin')) {
            return $query->where('created_by', $user->id);
        }

        return $query;
    }
}
$posts = Post::byUser($user)->get();

针对您的更新:

class Article extends Model
{
    // ...

    public function scopeByUser($query, User $user)
    {
        // If the user is not an admin, show articles by their department.
        // Chaining another where(column, condition) results in an AND in
        // the WHERE clause
        if (!$user->hasRole('admin')) {
            // WHERE department = X AND another_column = another_value
            return $query->where('department', $user->department)
                ->where('another_column', 'another_value');
        }

        // If the user is an admin, don't add any extra where clauses, so everything is returned.
        return $query;
    }
}
您将以与上面相同的方式使用它

Article::byUser($user)->get();

基本上,来自特定部门的用户应该只能查看该部门的文章。请参阅我的更新答案,而不是每个部门的
if
语句,您可以将部门值传递到查询中。老实说,这感觉像是一个更干净的解决方案,我要做个实验,但我会回来的。你们能用和和where一起吗?是的,当然,要做到这一点,你们可以把另一个
where
链接到它上面。我将用一个例子更新我的答案