Laravel пытается проверить, есть ли у пользователя связь с постом.

0

У меня есть сообщения, и эти сообщения могут быть сохранены пользователями для чтения позже. Я создал это отношение, и я могу легко их сэкономить или удалить. Проблема в том, что я не могу проверить, сохранена ли почта или нет во фронте. Теперь я написал код, чтобы справиться с этим, но он не работает. вот мой код контроллера:

$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.

Теги:
laravel-5.4
relationship

2 ответа

1
Лучший ответ

Кажется, что у вас есть модели " 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
    }
}
  • 0
    Это похоже на деликатный способ, я попробую его и помечу как правильный ответ, если он работает
  • 0
    Пришлось с ним немного поиграть, отлично работает
Показать ещё 1 комментарий
1

Если вы не проходите идентификацию благие в предложении 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();
  • 0
    Да, я думаю, что пропустил это, но все еще не работает.
  • 0
    По-прежнему отображается значение 1, что означает, что сообщение сохраняется, когда оно не
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню