Laravel éloquent :Plusieurs à plusieurs éléments de sélection sans enfants (en utilisant le pivot)

StackOverflow https://stackoverflow.com//questions/25028078

  •  21-12-2019
  •  | 
  •  

Question

Configuration assez standard :

Tableau "Posts", table "Catégories" Pivot "Posts_categories"

/************** CATEGORY MODEL *********/
class Category extends Eloquent
{
 /** standard code**/

public function posts()
{
    return $this->belongsToMany('Post','posts_categories');
}

}

/************* POSTS MODEL ************/
class Post extends Eloquent
{
/** the usual **/
public function categories()
{
    return $this->belongsToMany('Category', 'posts_categories');
}

tableau croisé dynamique avec une configuration appropriée des clés étrangères.

Je n'arrive pas à comprendre comment obtenir TOUS LES POSTES sans aucune catégorie (ou d'ailleurs obtenir des catégories sans aucun message, comme les catégories vides)

J'aimerais le faire de manière éloquente, mais en SQL, ce serait quelque chose comme :

SELECT *, 
       (SELECT COUNT(id) cnt 
        FROM posts_categories pc 
        WHERE pc.post_id = p.id)  AS cnt   
FROM posts p 
HAVING cnt = 0;
Était-ce utile?

La solution

Vous pouvez l'utiliser pour obtenir tout Posts qui n'ont pas Category:

$posts = Post::has('categories', '=', 0)->get();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top