N'existe pas de requête

Sep 27 2020

J'ai un problème avec une requête.

dans la table posts, j'ai posts.id, puis, dans la table reviews, j'ai posts_id (clé étrangère -> posts.id), reviews.id. Je veux interroger ces posts_id qui n'existent pas dans la table des critiques (post_id).

J'utilise des constructeurs de requêtes laravel. j'essaye comme ->

  $r = DB::table('reviews') ->select(DB::raw('count(id) as rev_count, posts_id')) ->groupBy('posts_id') ->get(); foreach ($r as $rr) { $p = DB::table('posts')
                ->select('id')
                ->where('id', '!=', $rr->posts_id)
                ->get();
        }

j'ai extrait avec succès la valeur. mais avec trop de complexité, peut-être buggy. s'il y en a une requête directe pour l'extraire?

Réponses

1 Sujitmohanty30 Sep 27 2020 at 19:03

Que diriez-vous d'utiliser not exists,

Requête SQL:

select *
   from posts
  where not exists
    (select reviews.posts_id
       from reviews
      where reviews.posts_id = posts.id)

Requête équivalente laravel:

DB::table('posts')
    ->select('id')
    ->whereNotExists(function ($query) { $query->select("reviews.posts_id")
              ->from('reviews')
              ->whereRaw('reviews.posts_id = posts.id');
    })
    ->get();

Il y a ce lien SO pourrait également vous être utile