Laravel éloquent :Plusieurs à plusieurs éléments de sélection sans enfants (en utilisant le pivot)
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;
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