2017-08-19 13 views
0

表示するには、管理者が承認する必要がある機能を作成したいと思います。投稿が作成されると、投稿は投稿テーブルに保存されます。デフォルトでは、承認された列はfalseになります。投稿を表示するには、管理者5人のうち3人の承認が必要です。だから私はデータベースからの投稿を取得し、管理パネルに表示したい。毎回、管理者に対して1つの投稿がランダムに表示されます。管理者が投稿を承認した場合、承認は他のテーブル名承認に保存されます。laravelの2つの異なるテーブルを比較する場所のデータを取得

モデルでは、私は、ランダムな未承認のポストを得るためにこれを使用しています私のコントローラで

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モデル

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

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

です。しかし、今私は、承認テーブルが管理者の1人によって承認データを含んでいる場合、投稿をフィルタリングする必要があります。彼/彼女は再びその投稿を見ることはありません。

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

承認の投稿が多い場合があります。同じ投稿が同じ管理者に再び表示されないように、管理者が投稿を承認されていることをどのように知ることができますか?

+1

なぜあなたPostモデルで 'ポスト()'の関係はありますか? –

答えて

0

Postモデルのpost()関係はバグのようです。私はあなたのApprovalモデルとの関係でなければならないと思いますよね?だから、まず、あなたのポストモデルでは、とのpost()方法を置き換える:

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

その後、ここにあなたのクエリのための1つのアプローチがあります:

$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

関連する問題