2017-08-19 115 views
0

我想创建一个功能,该功能需要5管理员批准才能显示。创建帖子时,帖子将存储在帖子表中。默认情况下,批准的列是错误的。为了显示该帖子,需要5个管理员中的3个批准。所以我想从数据库中获取帖子并在管理面板中显示。每次都会随机显示1个管理员的帖子。如果管理员批准了该帖子。该批准文件存储在其他表格名称批准文件中。获取数据,比较laravel中的两个不同表

该模型是

Post模型

public function user(){ 
    return $this->belongsTo('App\User'); 
} 

public function post(){ 
    return $this->belongsTo('App\Forum\Post'); 
} 

在型号核准

protected $fillable = [ 
    'admin_id', 
    'post_id', 
    'approved' 
]; 
public function admin(){ 
    return $this->belongsTo('App\Admin'); 
} 

public function post(){ 
    return $this->belongsTo('App\Forum\Post'); 
} 

在我的控制,我使用它来获取随机未经批准的职位。但是现在我需要过滤掉帖子,如果批准表包含管理员之一的批准数据。他/她不会再看到帖子。

$post = Post::inRandomOrder()->where('approved', false)->first(); 

万一它可能有多个帖子批准。我怎么知道管理员被批准了这个帖子,所以同一个帖子不会再显示给同一个管理员。

+1

为什么是'后()'在后模型的关系? –

回答

0

您的post()关系在您的Post模型看起来像一个错误。我认为它应该与你的Approval模型有关系,对吧?因此,首先,在安置自己的模型,代替post()法:

public function approvals() { 
    return $this->hasMany('App\Forum\Approval'); 
} 

然后,这里是您所查询的一种方法:

$post = Post::inRandomOrder()->where('approved', false) 
->with('approvals') 
->get() 
->filter(function($value, $key) { 

    // A post without any approvals yet is OK 
    if ($value->approvals->count() === 0) { 
     return true; 
    } 

    // If it has approvals, check the current admin isn't one of them 
    return !$value->approvals->contains('admin_id', \Auth::user()->id); 
}) 
->first() 
+0

它的工作,似乎很复杂,如果不能很好地理解这种关系。非常感谢 – masterhunter

相关问题