Laravel使用用户或管理员加入发布表

时间:2019-02-14 06:14:08

标签: php mysql laravel

我正在写博客,用户和管理员都可以在其中创建帖子。因此,我分别创建了3个表usersadminsposts表。在帖子表上,有2列user_idis_adminuser_id列是用户或管理员的ID。 is_admin中是布尔值列,其中帖子是由0(对于用户)和1(对于管理员)创建的。

表结构如下:

用户

 -id
 -name
 -email
 -password
 -timestamp

管理员

 -id
 -name
 -email
 -password
 -timestamp

帖子

 -id
 -title
 -image
 -body
 -user_id
 -is_admin
 -timestamp

现在我被困在显示帖子用户的名字。我不知道如何与用户或管理员加入帖子表。有什么方法可以像这样的代码获取用户名或管理员名的用户名?

$posts = DB::table('posts')
    ->select('posts.*', 'users.id', 'users.name', 'admins.id', 'admins.name')
    ->leftJoin('admins', function ($join) {
        $join->on('admins.id', '=', 'posts.user_id')
             ->where('posts.is_admin', '=', 1);
    })
    ->leftJoin('usesrs', function ($join) {
        $join->on('users.id', '=', 'posts.user_id')
             ->where('posts.is_admin', '=', 0);
    })
    ->get();

我知道我可以由具有一个表并具有角色和权限的管理员和用户来执行此操作,但是我不想更改表结构,因为它会消耗更多已完成的工作。

是否可以通过任何方式获取帖子的用户名Admin还是User?

2 个答案:

答案 0 :(得分:0)

我不知道这是否是个好选择,但目前我正在这样做。

i.e go to login page, enter login detail, click on submit etc.

如果您有其他答案,欢迎您。

谢谢。

答案 1 :(得分:0)

您应该normalize数据库结构,以避免重复数据。随着时间的流逝,您将开始遇到数据库性能问题。

对于您的情况,我认为您可以将Admins表同化为Users表。您可以将is_admin列从Posts移到合并的Users表中,这样您仍然有一个admin用户标志,或者更好的是,有了Roles表,其中您可以定义用户的角色。像这样:

用户表:

 -id
 -name
 -email
 -password
 -role_id
 -timestamp

角色表:

 -id
 -name

帖子表:

 -id
 -title
 -image
 -body
 -user_id
 -timestamp

使用此数据库结构,您可以轻松组成查询而不会过于复杂。这样做不需要很多,这实际上是一个很好的实践。

$authors = Post::select('posts.*' ,'users.name as user_name')
               ->join('users', 'posts.user_id', '=', 'users.id')
               ->orderBy('id', 'asc')
               ->get()
               ->toArray();