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.

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.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Modelo Optin

    class Optin extends Model
    {    
    
        public function sponsor()
        {
            return $this->belongsTo(Sponsor::class);
        }
        public function participant()
        {
            return $this->hasOne(Participant::class);
        }
    }
    

    Para obtener los participantes que se crearon hoy y optaron por un cierto patrocinador, puedes utilizar el siguiente código:

    $sponsor = Sponsor::find(1);
    $optins = $sponsor->optins()->get();
    foreach($optins as $optin)
    {
        $participant = $optin->participant()->createdToday()->first();
        if($participant) {
            echo($participant->id . "\n");
        }
    }
    

Comments are closed.