У меня есть сообщения, и эти сообщения могут быть сохранены пользователями для чтения позже. Я создал это отношение, и я могу легко их сэкономить или удалить. Проблема в том, что я не могу проверить, сохранена ли почта или нет во фронте. Теперь я написал код, чтобы справиться с этим, но он не работает. вот мой код контроллера:
$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 в представлении. Кто-нибудь знает, что я могу потерять?
Вот мои отношения с user controllerhio:
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.
Кажется, что у вас есть модели " Collection
Article
, и вы пытаетесь определить, связано ли это с User
или нет.
Если это случай, я бы предложил нетерпеливо загружать отношение User
когда вы первоначально запрашивали модели Article
. Это имеет преимущество использования одного запроса для загрузки отношения, а не для каждой Article
.
$userId = Auth::id();
$articles = Article::with(['savedarticle' => function ($query) use ($userId) {
return $query->where('user_id' => $userId);
}])->get();
В этой Collection
, поскольку мы загрузили специально User
, savedarticle
проверку подлинности, вы можете продолжить, зная, что если отношение savedarticle
имеет count
1
, то существует отношение User
.
foreach ($articles as $article) {
if ($article->savedarticle->count()) {
// User has already saved article
} else {
// User has not saved article
}
}
Если вы не проходите идентификацию благие в предложении Where? Кроме того, для этого требуется a → 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();