Php Laravel试图检查用户是否与post有关系

Php Laravel试图检查用户是否与post有关系,php,mysql,laravel-5.4,relationship,Php,Mysql,Laravel 5.4,Relationship,我有帖子,用户可以保存这些帖子以供以后阅读。我创建了此关系,可以轻松保存或删除它们。问题是我无法检查帖子是否保存在前端。现在我写了一些代码来处理这个问题,但它似乎不起作用。这是我的控制器代码: $articleFlag = 1; $userID = Auth::User()->id; if (count($bestarticles) > 0) { foreach ($bestarticles as $bestarticle) { $saveddata =

我有帖子,用户可以保存这些帖子以供以后阅读。我创建了此关系,可以轻松保存或删除它们。问题是我无法检查帖子是否保存在前端。现在我写了一些代码来处理这个问题,但它似乎不起作用。这是我的控制器代码:

$articleFlag = 1; 
$userID = Auth::User()->id;

if (count($bestarticles) > 0) {
    foreach ($bestarticles as $bestarticle) {
        $saveddata = DB::table('savearticle')->where('user_id', $userID && 'article_id', $bestarticle);

        if (count($saveddata) > 0) {
            $articleFlag = 1;
        } else {
            $articleFlag = 2;
        }
    } //foeach endes here
} //first if endes here
然后我将
$articlefag
传递给视图,而不是使用
if
但问题是,无论我做什么,
if(count($bestarticles)>0)
返回true,并且我在视图中得到值1。 有人知道我可能遗漏了什么吗

这是我的用户控制器关系Shio:

   function savedarticle(){
   return $this->belongsToMany('App\User', 'savearticle', 'user_id', 
   'article_id');
   }
下面是我用来保存和删除的函数:

    function savethearticle(Article $article){
     $this->savedarticle()->syncWithoutDetaching([$article->id]);
}
function removethearticle(Article $article){
     $this->savedarticle()->detach([$article->id]);
}
但是没有什么你需要担心的。我可以删除和添加

或者是否有其他方法检查视图中的现有关系,或者有更好的方法检查控制器中的现有关系并传递到视图中


我使用的是Laravel 5.4。

您是否应该在Where子句中传递最佳文章的id?此外,它还需要->get()将请求发送到数据库并运行查询

 $saveddata = DB::table('savearticle')->where('user_id', $userID && 'article_id', $bestarticle);
应该是

 $saveddata = DB::table('savearticle')->where('user_id', $userID && 'article_id', $bestarticle->id)->get();

您是否应该在Where子句中传递bestarticle的id?此外,它还需要->get()将请求发送到数据库并运行查询

 $saveddata = DB::table('savearticle')->where('user_id', $userID && 'article_id', $bestarticle);
应该是

 $saveddata = DB::table('savearticle')->where('user_id', $userID && 'article_id', $bestarticle->id)->get();

看起来好像您有一个
系列
文章
模型,您正在尝试确定它是否与
用户
相关

如果是这种情况,我建议您在最初查询
文章
模型时立即加载
用户
关系。这样做的优点是使用一个查询来加载关系,而不是每个
文章都使用一个查询

$userId = Auth::id();

$articles = Article::with(['savedarticle' => function ($query) use ($userId) {
    return $query->where('user_id' => $userId);
}])->get();
使用此
集合
,因为我们专门加载了当前经过身份验证的
用户
,因此您可以继续了解,如果
savedarticle
关系的
计数
1
,则
用户
关系存在

foreach ($articles as $article) {
    if ($article->savedarticle->count()) {
        // User has already saved article
    } else {
        // User has not saved article
    }
}

看起来好像您有一个
系列
文章
模型,您正在尝试确定它是否与
用户
相关

如果是这种情况,我建议您在最初查询
文章
模型时立即加载
用户
关系。这样做的优点是使用一个查询来加载关系,而不是每个
文章都使用一个查询

$userId = Auth::id();

$articles = Article::with(['savedarticle' => function ($query) use ($userId) {
    return $query->where('user_id' => $userId);
}])->get();
使用此
集合
,因为我们专门加载了当前经过身份验证的
用户
,因此您可以继续了解,如果
savedarticle
关系的
计数
1
,则
用户
关系存在

foreach ($articles as $article) {
    if ($article->savedarticle->count()) {
        // User has already saved article
    } else {
        // User has not saved article
    }
}

谢谢你让它更具可读性。我的大脑现在不太好用了:/你能发布你的
用户
文章
模型吗,这样我们就可以看到它们之间的关系了。@fubar我添加了它。但是我已经可以删除和添加了,这没有问题。我我无法显示保存或删除按钮,这取决于用户是否已经保存了帖子。感谢您让帖子更具可读性。我的大脑现在不太好用了:/你能发布你的
用户
文章
模型吗,这样我们就可以看到它们之间的关系了。@fubar我添加了它。但是我已经可以删除和添加了,这没有问题。我我无法显示保存或删除按钮,这取决于用户是否已经保存了帖子,是否仍然在视图中获取值1,这意味着帖子在实际不存在时被保存。我将在该行中添加一个->get(),然后在其后添加一个dd($saveddata),以了解如果您希望它为零,那么为什么计数大于零。返回什么?是的,我试过了,它返回
Collection{#244▼   #items:[]}
因为您正在生成请求,但实际上没有触发它。您需要一个get()或first()来实际执行get。我将更新我的答案。仍然在视图中获取值1,这意味着帖子在实际不存在时被保存。我将在该行中添加一个->get(),然后在其后添加一个dd($saveddata),以查看如果您希望它为零,那么为什么计数大于零。返回什么?是的,我试过了,它返回
Collection{#244▼   #items:[]}
因为您正在生成请求,但实际上没有触发它。您需要一个get()或first()来实际执行get。我会更新我的答案。这看起来像是一个敏感的方法,我会尝试它,如果它有效,我会标记为正确答案。这看起来像是一个敏感的方法,我会尝试它,如果它有效,我会标记为正确答案