Cómo ejecutar una consulta anidada en Laravel.
Tengo las siguientes 3 tablas:
Classrooms
id subject
RegisteredStudents
id user_id class_id
Posts
id class_id type attachment
Models
Classroom.php
public function posts()
{
return $this->hasMany(Post::class);
}
RegisteredStudents.php
public function classroom()
{
return $this->belongsTo(Classroom::class);
}
Post.php
public function classroom()
{
return $this->belongsTo(Classroom::class);
}
Ahora necesito obtener todas las publicaciones de una clase en particular, en la que un estudiante está registrado.
Por ejemplo, un estudiante está registrado para la clase cuyo id es 1 en la tabla de aulas. Por lo tanto, se registrará en la tabla registered_students que este usuario en particular está registrado en esta clase en particular. Cada clase puede tener varias publicaciones en la tabla de publicaciones. Y el usuario debe obtener todas las publicaciones de su clase.
Estoy intentando algo como esto:
$registered_classes = RegisteredStudent::where('user_id', $user->id)
->where(function ($q) use ($class_id){
Post::where('class_id', $class_id);
})->get();
que definitivamente no es correcto. ¿Cuál sería la consulta correcta para esto?
davy.ai
Para obtener todas las publicaciones de una clase en la que un estudiante está registrado, puedes usar la siguiente consulta:
Explicación:
RegisteredStudent
donde eluser_id
coincide con el id de usuario dado.with()
para cargar de forma ambiciosa la relaciónposts
para elclassroom
de cadaRegisteredStudent
.with()
, pasamos un cierre que define una consulta para filtrar las publicaciones por elclass_id
dado.pluck()
yflatten()
en la colecciónclassroom.posts
para obtener todas las publicaciones de la clase registrada.