Php Laravel-根据用户进行查询
在Laravel中,我有一个场景,在这个场景中,不同的用户可以进入一个视图刀片,在那里他们可以看到他们创建的帖子 目前我只是传入所有数据,但我想知道如何根据用户将数据传递到视图 例如,如果我是root用户,我可以看到所有类似的内容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 您认为使用条件查询作用域可以实现这一点吗 更新
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
链接到它上面。我将用一个例子更新我的答案