我有帖子,用户可以保存这些帖子以供以后阅读。我创建了这种关系,我可以轻松保存或删除它们。问题是我无法检查帖子是否保存在前端。现在我写了一些代码来处理这个问题,但它似乎不起作用。这是我的 Controller 代码:
$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
传递给 View ,而不是使用 if
检查它的值
但问题是,无论我做什么 if (count($bestarticles) > 0)
返回 true 并且我在 View 中得到值 1。
有人知道我可能会错过什么吗?
这是我的用户 Controller 关系:
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]);
}
但是您无需担心。我可以删除和添加。
或者是否有另一种方法来检查 View 中的现有关系,或者是否有更好的方法来检查 Controller 中的关系并将其传递到 View 中?
我使用的是 Laravel 5.4。
最佳答案
看起来好像您有一个 Article
模型的 Collection
,并且您正在尝试确定它是否与 User
相关或不。
如果是这种情况,我建议您在最初查询 Article
模型时立即加载 User
关系。这样做的优点是使用一个查询来加载关系,而不是每个文章
一个查询。
$userId = Auth::id();
$articles = Article::with(['savedarticle' => function ($query) use ($userId) {
return $query->where('user_id' => $userId);
}])->get();
有了这个Collection
,因为我们已经专门加载了当前经过身份验证的User
,所以您可以继续了解savedarticle
关系是否具有count
为 1
,表明 User
关系存在。
foreach ($articles as $article) {
if ($article->savedarticle->count()) {
// User has already saved article
} else {
// User has not saved article
}
}
关于php - Laravel 尝试检查用户是否与帖子有关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47865622/