soy nuevo en el tema, tengo dos tablas relacionadas entre si, una para departamentos y otra para usuarios, quiero saber cuantos usuarios hay en cada departamento
DepartmentController.php
public function index() { return Inertia::render('back/app/departments/index', [ 'filters' => request()->all('visibility', 'status', 'search'), 'departments' => Department::orderBy('name')->get(), 'total_members' => User::where('department_id')->count(), dd(User::where('department_id')->count()), ]); }Índice.vue
<td class="flex items-center text-sm leading-5 text-gray-500 px-6 py-4 whitespace-no-wrap"> <span class="font-medium">{{ department.total_members }}</span> {{ $trans('labels.members') }} </td> <td class="px-6 py-4 whitespace-no-wrap text-right text-sm leading-5 font-medium"> <inertia-link :href="route('app:projectdepartment.index', {id: department.id})"> {{ $trans('labels.view-activity') }} </inertia-link> </td>Si tiene la relación de users configurada en su modelo de Department , puede usar el método withCount() :
Department::withCount('users')->orderBy('name')->get() Esto le dará una propiedad de cuenta de users_count en cada departamento.
Suponiendo que tiene las relaciones definidas en cada modelo como se indicó, también puede definir un elemento de acceso o, como ya se dijo, obtener la cantidad de modelos relacionados mediante withCount o también con loadCount después de recuperar un modelo de departamento individual.
Modelos/Usuario.php
public function department() { return $this->belongsTo(Department::class, 'department_id'); } public function getActiveUserCountAttribute($value) { // Perform additional logic on the users relationship return $this->users()->where('active',1)->count(); }Modelos/Departamento.php
public function users() { return $this->hasMany(User::class); }Recuerda que uno de los beneficios de withCount es que no carga los modelos relacionados, evitando un problema de n+1. Si usa withCount, no necesitaría el descriptor de acceso definido en el modelo de departamento, pero sí la relación de usuario definida en el departamento.
Tenga en cuenta que también puede usar el método loadCount después de haber recuperado el modelo de departamento, por ejemplo, para una página de presentación individual en lugar de una colección.
// Desde tu método show en tu controlador
$department = Department::where('name',$request['name'])->first(); $department->loadCount('users');Para cargar con entusiasmo el atributo 'active_user_count' en cada modelo de departamento, usaría la propiedad $with. Con esto definido, no necesitaría usar withCount o similar en su método de controlador.
// Departamento.php
// A relationship that should always be loaded with every Department request. protected $with = ['active_user_count']Documentos de Laravel: https://laravel.com/docs/8.x/eloquent-relationships#counting-related-models