2017-08-19 36 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

相關問題