laravel - 仅显示用户有权访问的帖子
问题描述
我有这 3 个表,一个帖子可以被多个用户查看:
用户
帖子
用户帖子
我如何使用 Eloquent 仅向用户显示他有权访问的帖子?
谢谢
解决方案
假如说
- 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 结束循环时仅获得一篇帖子。只是为了展示如何获取帖子的数据,可以在视图中获取数据
推荐阅读
- android - Android 模拟器:在平板电脑模拟器上安装 google play 服务
- java - 快速获取 YYYYMMDD 格式的日期数的方法?
- apache-flink - Flink 部署生产标准
- javascript - 从 HTML 内容中提取平铺图像
- visual-studio-code - 如何在 VS Code 中编辑默认日志片段
- c++ - 使用向量进行 C++ 类初始化
- java - 在flyingsacer pdf中重复表格标题和thead
- ios - 在 Swift 中返回后更改对象
- office-js - 安装期间具有可配置选项的 Office 加载项?
- c# - 如何移动到最后一个表单域以结束表单流并开始新的意图