如何在多对多关系中比较ID

时间:2018-07-15 19:13:55

标签: php laravel

我有具有m2m关系的“文章”和“用户”模型(带有user_id和article_id列的数据透视表)。 在ArticleController中,我需要检查的是用户是该文章的作者之一,以具有对文章执行更新/删除操作的访问权限。 我可以从auth-> user()-> id中获取当前登录的用户ID。

4 个答案:

答案 0 :(得分:0)

在这种情况下,您需要使用Laravel策略
我建议您看一下这份文档
Authorization

答案 1 :(得分:0)

如果您根据https://laravel.com/docs/5.6/eloquent-relationships#many-to-many使用标准口才关系

只需简单地先获取文章,然后检查它是否与经过身份验证的用户有关。

$article = Article::find($id);
if ($article->users()->where('id', Auth::user()->id)->get()->count() ) {
     //your code
}

答案 2 :(得分:0)

我在策略中使用了这种算法。谢谢。

public function update(User $user, Article $article){
    //All articles id where user is author.
    $userArticles = UserArticle::where('user_id', $user->id)->get();

    $confirmFlag = false; //check flag.
    //We compare article ids that belong to user with article id that we want to edit.
    foreach ($userArticles as $userArticle) {
        if ($userArticle->article_id != $article->id) {
            $confirmFlag = false;
        } else {
            $confirmFlag = true;
            break; // if we found that article that we want to edit
            // is belong to user then we break our foreach with $confirmFlag=true.
        }
    }
    return $confirmFlag == true ? true : false;
}

答案 3 :(得分:0)

根据您自己的回答,我想给您一个更好的方法...

public function update(User $user, Article $article){
//All articles id where user is author.
  $userArticles = UserArticle::where('user_id', $user->id)->where('article_id', $article->id)->first();

  return $userArticles === null ? false : true;
}