Tengo estas relaciones:

ARTÍCULOS

 public function category()
    {
      return $this->belongsTo('App\Models\Categories');
    }

CATEGORÍA tiene traducciones

public function c_translations()
  {
    return $this->hasMany('App\Models\CategoryTranslations', 'category_id');
  }

En los artículos tengo id de categoría, también en las traducciones tengo id de categoría. Entonces, ¿cómo puedo contar cuántos artículos tiene cada categoría? ¿Cualquier sugerencia?

 $articles = Articles::all();
      foreach($articles as $article ){
      $articles_category = Articles::where('id',$article->id)->withCount('category')->first();

      }

Intenté esto pero siempre obtengo 0 para todas las categorías

2
uzhas 25 dic. 2016 a las 19:02

3 respuestas

La mejor respuesta

Defina una hasMany en su relación {{X1 }} modelo como:

public function articles()
{
    return $this->hasMany('App\Models\Article');
}

Luego puede usar withCount para consultarlo como :

$categories = Category::withCount('articles')->get();

Pásalo a tu vista y luego podrás acceder al no. de artículos de categoría como:

@foreach ($categories as $category)
  <li>{{ category->title }}</li>
  <li>{{ category->articles_count }}</li>
@endforeach
7
Amit Gupta 25 dic. 2016 a las 16:44

Utilice el método withCount() para contar la relación.

Model::where('id', $id)->withCount('relation')->first();

Si desea contar el número de resultados de una relación sin realmente cargarlos, puede usar el método withCount, que colocará una columna {relation}_count en sus modelos resultantes.

0
Alexey Mezenin 25 dic. 2016 a las 16:04

Creo que deberías usar un grupo por declaración. Selecciona category_id, COUNT (*) DE artículos GROUP BY category_id Esto devolverá el número de artículos para cada category_id

0
Théo CHAMPION 25 dic. 2016 a las 16:07