Laravel试图检查用户是否与帖子有关系

时间:2017-12-18 09:43:11

标签: php mysql laravel-5.4 relationship

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

$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

并且我将$articleFlag传递给视图,而不是使用if检查其值 但问题是,无论我做什么if (count($bestarticles) > 0)都返回true,我在视图中得到值1。 有没有人知道我可能会缺少什么?

这是我的用户控制器relationshio:

   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。

2 个答案:

答案 0 :(得分:1)

你不应该在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();

答案 1 :(得分:1)

您似乎拥有CollectionArticle模型,并且您正在尝试确定它是否与User相关。

如果是这种情况,我建议您在最初查询User模型时急切加载Article关系。这样做的好处是可以使用一个查询来加载关系,而不是每Article个。{/ p>

$userId = Auth::id();

$articles = Article::with(['savedarticle' => function ($query) use ($userId) {
    return $query->where('user_id' => $userId);
}])->get();

使用此Collection,因为我们已经专门加载了当前经过身份验证的User,您可以继续了解savedarticle关系是否count {{1} } {,1关系存在。

User