es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtener una lista de relaciones ordenadas por campo pivote en Laravel.

Básicamente tengo usuarios que pertenecen a muchos usuarios. Podemos imaginar relaciones de amistad entre usuarios.

Así que tengo una tabla dinámica para la relación, con los id’s de 2 usuarios y un campo adicional ‘created_at’.


Tabla ‘users’: id, nombre

Tabla ‘friend_user’: user_id, friend_id, created_at


En mi modelo User, tengo una función ‘friends’ que devuelve una colección de usuarios:

public function friends() {
return $this->belongsToMany(User::class, ‘friend_user’, ‘user_id’, ‘friend_id’);
}

Mi objetivo es obtener la lista de todas las relaciones entre usuarios. Con un bucle en User::all(), puedo obtener fácilmente todas esas relaciones, usuario tras usuario:

$users = User::all();
foreach ( $users as $user ) {
foreach ( $user->friends as $friend ) {
return [$user->name . ‘ es amigo de ‘ . $friend->name];
}
}

Pero me gustaría obtenerlos ordenados por ‘created_at’, indiferentemente del usuario que esté en la relación.

¿Hay alguna forma fácil de hacer esto con Eloquent o tal vez de otra manera?

Gracias por tu ayuda.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una manera fácil de obtener la lista de todas las relaciones entre usuarios ordenadas por created_at utilizando Eloquent. Puedes modificar tu función friends() para incluir el método withPivot y así acceder al campo adicional created_at en la tabla friend_user. Luego, puedes modificar tu consulta para usar el método orderBy y ordenar los resultados por created_at. Aquí está el código actualizado:

    public function friends() {
        return $this->belongsToMany(User::class, 'friend_user', 'user_id', 'friend_id')
            ->withPivot('created_at')
            ->orderBy('created_at');
    }
    

    Con esta modificación, simplemente puedes llamar a $user->friends para obtener una colección de usuarios ordenados por el campo created_at en la tabla pivot friend_user.

Comments are closed.