首页 > 解决方案 > 仅显示用户有权访问的帖子

问题描述

我有这 3 个表,一个帖子可以被多个用户查看:

用户

帖子

用户帖子

我如何使用 Eloquent 仅向用户显示他有权访问的帖子?

谢谢

标签: laraveleloquent

解决方案


假如说

  • users 表包含具有 id 的用户的信息
  • 帖子表包含带有 id、user_id 的详细帖子
  • userpost 包含有关用户的信息以及他们使用 user_id 和 post_id 访问的帖子。

代码是

//users.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class users extends Model
{
    public function posts()
    {
        return $this->hasMany("App\posts");
    }

    public function userPosts()
    {
        return $this->hasMany("App\userpost");
    }
}

后模型

//posts.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class posts extends Model
{
    public function user()
    {
        return $this->belongsTo("App\users");
    }
}

userpost 模型(这里是用户和他们被访问的帖子)

//userpost.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class userpost extends Model
{
    public function users(){
        return $this->hasMany("App\users");
    }

    public function posts()
    {
        return $this->hasMany("App\posts","id","post_id");
    }
}

控制器可以写成

//PostViewController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\posts;
use App\users;
use App\userpost;

class PostViewController extends Controller
{
    public function view()
    {
        $user_id = 2; //user_id of the user you want to view
        $posts= userpost::where('user_id', $user_id)->get(); 

        //return $posts; you can return $posts and view it on "view" by using foreach as shown below 
        foreach($users as $user)
        {
            return $user->posts;//posts is the function made in model.
        }

    }

}

此处 foreach 循环仅执行一次,以便在 return 结束循环时仅获得一篇帖子。只是为了展示如何获取帖子的数据,可以在视图中获取数据


推荐阅读