Tengo una función allArticlesCount que cuenta todos los artículos que tienen draft 1 .
$allArticlesCount = Article::where('draft', 1)->count(); También tengo una función que cuenta la cantidad de artículos en una categoría específica, uso withCount , pero ella cuenta absolutamente todos los artículos, y solo necesito con draft 1
$categories = BlogCategory::withCount('articles')->get(); La pregunta es, ¿cómo puedo hacer que todos los artículos que tienen el draft 1 se cuenten en la función $categories ?
La función withCount() , al igual que la función with() , puede usar una matriz como argumento para permitir la modificación de la relación que se está contando. En tu caso, harías lo siguiente:
$categories = BlogCategory::withCount(['articles' => function($query){ $query->where('draft', 1); }])->get(); Esto devolverá sus instancias de BlogCategory , cada una con una propiedadarticles_count indicativa de la cantidad de draft de articles_count relacionados con cada instancia.
De forma nativa, puede definir una relación de draftArticles de artículos:
public function draftArticles() { return $this->hasMany(Article::class)->where('draft', 1); // Note: May need to adjust `hasMany()` to reference proper FK column, etc. } Y realiza withCount() en eso en su lugar:
$categories = BlogCategory::withCount('draftArticles')->get(); Cada instancia de BlogCategory tendría una propiedad draft_articles_count que refleja eso.