Cómo construir una consulta con relaciones de varios niveles en Laravel Eloquent
Tengo tres modelos. Patrocinador, Optin y Participante. Patrocinador tiene una relación uno-a-muchos con Optin y Optin tiene una relación uno-a-uno con Participante.
Lo que hace que los modelos se vean así:
Modelo de Patrocinador
class Sponsor extends Model
{
public function optins()
{
return $this->hasMany(Optin::class);
}
}
Modelo de Optin
class Optin extends Model
{
public function sponsor()
{
return $this->belongsTo(Sponsor::class);
}
public function participant()
{
return $this->belongsTo(Participant::class);
}
}
Modelo de Participante
class Participant extends Model
{
public function optins()
{
return $this->hasMany(Optin::class);
}
public function scopeCreatedToday($query)
{
return $query->whereDate('created_at', Carbon::today());
}
}
Ahora, en una tarea programada diaria, quiero iterar a través de todos los participantes que se crearon hoy y que optaron por un cierto patrocinador para enviarles un correo electrónico o algo así. Ahora llegué hasta imprimir los ID de los participantes correspondientes. Pero el siguiente paso es obtener el objeto del participante y filtrarlos por la fecha de creación correcta. Pero estoy un poco perdido en cómo manejar esto.
$sponsor = Sponsor::find(1);
$count = $sponsor->optins()->count();
echo(“Count: ” . $count . “\n”);
$optins = $sponsor->optins()->get();
foreach($optins as $optin)
{
echo($optin->participant_id . “\n”);
}
EDITAR:
Después de repensar la estructura, descubrí que Optin tiene una relación muchos-a-uno con Participante.
davy.ai
Modelo Optin
Para obtener los participantes que se crearon hoy y optaron por un cierto patrocinador, puedes utilizar el siguiente código: