php - Laravel 通过用户或管理员加入帖子表

标签 php mysql laravel

我正在开发博客,用户和管理员都可以在其中创建帖子。所以我创建了3个表,分别是usersadminsposts表。在帖子表上,有 2 列 user_idis_adminuser_id 列是用户或管理员的 ID。 is_admin 中是 bool 列,其中帖子由 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();

我知道我可以通过管理员和用户使用一张表以及角色和权限来完成此操作,但我不想更改表结构,因为这会消耗更多已经完成的工作时间。

有什么方法可以获取帖子的用户名,是管理员还是用户?

最佳答案

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

    $userPosts = Post::select('posts.*', 'users.name as user_name')
        ->join('users', 'posts.user_id', '=', 'users.id')
        ->where('user_type', '=', '0')
        ->get()
        ->toArray();

    $adminPosts = Post::select('posts.*', 'admins.name as user_name')
        ->join('admins', 'posts.user_id', '=', 'admins.id')
        ->where('user_type', '=', '1')
        ->get()
        ->toArray();

    $posts = collect(array_merge($userPosts, $adminPosts))->sortBy('id')->toArray();

如果您有除此之外的答案,我们随时欢迎您。

谢谢。

关于php - Laravel 通过用户或管理员加入帖子表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54684233/

相关文章:

mysql - 如何授予用户访问mysql上所有存储过程的权限?

mysql - 数据库性能改进

php - Laravel 5.2 单元测试错误:BadMethodCallException:调用未定义的方法 Illuminate\Database\Query\Builder::make()

php - 统计每个状态的行数 - Laravel eloquent

php - 如何在 CentOs 5.5 上安装 Sphinx?

php - 从 Controller 调用数据库中的数据以使用 laravel 查看

php - 从 Laravel-5.7 在 S3 中上传文件时出现 AccessDenied 错误

php - 在 Laravel 5.3 中添加用于重置密码的 Mailgun 标签

当值太大时 php-handlersocket 结果会被截断

php - 如何根据 PHP 数据库中的结果在 jQuery 日期选择器上禁用一周中的某些天